tyt-api-nest/docs/auth.md
EL 6ec2d0b0e0 新增 B 端设备模块(后端 CRUD、分页筛选、权限隔离)并接入前端设备管理页面与路由菜单
鉴权改为登录态回库校验,新增 tokenValidAfter 失效时间,支持密码变更与 seed 重置后旧 token 立即失效
患者字段由 idCardHash 统一迁移为 idCard,新增身份证标准化逻辑并同步 C 端生命周期查询参数
组织模块增加小组删除限制(有成员时返回 409)并补充中文错误消息
任务取消接口支持可选 reason 字段(先透传事件层)
补齐 Prisma 迁移、文档说明和 E2E 用例(含设备模块与 token 失效场景)
2026-03-18 20:23:55 +08:00

1.6 KiB
Raw Blame History

认证模块说明(src/auth

1. 目标

  • 提供系统管理员创建、登录、/me 身份查询。
  • 使用 JWT 做认证Guard 做鉴权RolesGuard 做 RBAC。

2. 核心接口

  • POST /auth/system-admin:创建系统管理员(需引导密钥)
  • POST /auth/login:手机号 + 角色 + 密码登录(支持同手机号多院场景)
  • GET /auth/me:返回当前登录用户上下文

3. 鉴权流程

  1. AccessTokenGuardAuthorization 读取 Bearer Token。
  2. 校验 JWT 签名、idiat 等关键载荷字段。
  3. 根据 id 回库读取用户当前角色与组织归属,不再直接信任 token 里的角色和范围。
  4. 校验 iat >= user.tokenValidAfter若用户被重置密码、seed 重刷或账号被清理,则旧 token 立即失效。
  5. 当前数据库用户映射为 ActorContext 注入 request.actor
  6. RolesGuard 根据 @Roles(...) 判断角色是否允许访问。

4. Token 约定

  • HeaderAuthorization: Bearer <token>
  • 载荷关键字段:idiat
  • 角色和组织范围以数据库当前用户记录为准,不以 token 历史载荷为准

5. 错误码与中文消息

  • 未登录/Token 失效:401 + 中文 msg
  • 角色无权限:403 + 中文 msg
  • 参数非法:400 + 中文 msg

统一由全局异常过滤器输出:{ code, msg, data: null }

6. 失效策略

  • 用户密码被修改后,会刷新 user.tokenValidAfter,旧 token 全部失效。
  • 执行 E2E 重置并重新 seed 后seed 账号的 tokenValidAfter 也会刷新,历史 token 不可继续复用。