## Why 管理员创建用户、重置密码、建租户下发的都是临时/初始密码,但系统没有「首登强制改密」机制——临时密码可被长期使用,一旦泄漏即越权。企业后台需要一条强制闭环:拿到临时密码 → 首登被拦 → 改密 → 才可用系统。 ## What Changes - **待改密标记**:`user` 新增 `must_change_password`(布尔,默认 false);管理员重置密码、`createTenant` 下发随机密码时置 true,管理员创建用户时默认强制(可关闭),用户自行改密成功后清 false。 - **登录返回标志**:登录响应新增 `mustChangePassword`。 - **后端硬门禁**:未改密用户仅可访问「修改本人密码 / 登出」,其余接口返回 403。 - **前端强制流程**:登录后若待改密,强制跳转改密页并拦截其它路由;改密成功后清会话、跳登录重新认证。 ## Capabilities ### New Capabilities - `frontend/AD/force-password-change`: 首登强制改密页面与路由守卫(强制跳转、改密后重新登录)。 ### Modified Capabilities - `shared/data-model`: `user` 实体新增 `must_change_password` 待改密标记。 - `shared/api-contract`: 登录响应新增 `mustChangePassword` 标志。 - `backend/auth`: 登录返回待改密标志、改密清除标志、新增「待改密门禁」。 - `frontend/AD/user`: 创建用户表单新增「首登强制改密」配置项。 ## Impact - **后端**:`auth`(login 返回标志、changePassword 清标志、JwtAuthGuard 加门禁)、`users`(createUser 接受 mustChangePassword 参数、resetPassword 置标记)、`tenants`(createTenant 置标记)、`tenant-template`(initTenant 加 forcePasswordChange 选项);Prisma migration(`sys_user` 加列)。 - **前端**:登录 store 保存待改密状态、路由守卫拦截、新增强制改密页、用户创建表单加「首登强制改密」开关、`api/auth.ts` 类型扩展。 - **数据**:Prisma migration(`sys_user` 加 `must_change_password`)。