鉴权改为登录态回库校验,新增 tokenValidAfter 失效时间,支持密码变更与 seed 重置后旧 token 立即失效 患者字段由 idCardHash 统一迁移为 idCard,新增身份证标准化逻辑并同步 C 端生命周期查询参数 组织模块增加小组删除限制(有成员时返回 409)并补充中文错误消息 任务取消接口支持可选 reason 字段(先透传事件层) 补齐 Prisma 迁移、文档说明和 E2E 用例(含设备模块与 token 失效场景)
41 lines
1.6 KiB
Markdown
41 lines
1.6 KiB
Markdown
# 认证模块说明(`src/auth`)
|
||
|
||
## 1. 目标
|
||
|
||
- 提供系统管理员创建、登录、`/me` 身份查询。
|
||
- 使用 JWT 做认证,Guard 做鉴权,RolesGuard 做 RBAC。
|
||
|
||
## 2. 核心接口
|
||
|
||
- `POST /auth/system-admin`:创建系统管理员(需引导密钥)
|
||
- `POST /auth/login`:手机号 + 角色 + 密码登录(支持同手机号多院场景)
|
||
- `GET /auth/me`:返回当前登录用户上下文
|
||
|
||
## 3. 鉴权流程
|
||
|
||
1. `AccessTokenGuard` 从 `Authorization` 读取 Bearer Token。
|
||
2. 校验 JWT 签名、`id`、`iat` 等关键载荷字段。
|
||
3. 根据 `id` 回库读取用户当前角色与组织归属,不再直接信任 token 里的角色和范围。
|
||
4. 校验 `iat >= user.tokenValidAfter`,若用户被重置密码、seed 重刷或账号被清理,则旧 token 立即失效。
|
||
5. 当前数据库用户映射为 `ActorContext` 注入 `request.actor`。
|
||
6. `RolesGuard` 根据 `@Roles(...)` 判断角色是否允许访问。
|
||
|
||
## 4. Token 约定
|
||
|
||
- Header:`Authorization: Bearer <token>`
|
||
- 载荷关键字段:`id`、`iat`
|
||
- 角色和组织范围以数据库当前用户记录为准,不以 token 历史载荷为准
|
||
|
||
## 5. 错误码与中文消息
|
||
|
||
- 未登录/Token 失效:`401` + 中文 `msg`
|
||
- 角色无权限:`403` + 中文 `msg`
|
||
- 参数非法:`400` + 中文 `msg`
|
||
|
||
统一由全局异常过滤器输出:`{ code, msg, data: null }`。
|
||
|
||
## 6. 失效策略
|
||
|
||
- 用户密码被修改后,会刷新 `user.tokenValidAfter`,旧 token 全部失效。
|
||
- 执行 E2E 重置并重新 seed 后,seed 账号的 `tokenValidAfter` 也会刷新,历史 token 不可继续复用。
|