- 归档 close-phase-0(RBAC 权限 + 审计/登录日志 + seed 收口) - 新增主 spec:backend/auth、backend/res、backend/audit、backend/login - 追踪 sysmgr-nest passwordHash 泄漏修复 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Why
Phase 0 后端已实现认证、10 个域 CRUD、多租户/软删/data_scope 过滤,但有三处「声明未生效」:① @RequirePermissions 已定义却零接口使用,任何登录用户都能增删改任意资源;② sys_audit_log / sys_login_log 只有查询接口、无任何写入点;③ 无 seed 脚本,新 fork 无法一键初始化。这三点是「脚手架」区别于普通 CRUD 的核心价值,fork 出去即是安全漏洞 + 排障盲区。本次收口。
What Changes
- 三级鉴权真正落地:
@Public不登录 → 无标记仅登录 →@RequirePermissions('domain:action')登录+权限码;无标记接口默认仅登录。 - 权限码数据驱动:权限码 = 资源表
api/button型资源的code(细粒度domain:action),登录时聚合进请求上下文,守卫做集合判断。 - 超管绕过:角色
code=super_admin绕过权限码校验、data_scope 看全量。 - 审计日志落库:
@AuditLog(domain, action)装饰器 + 拦截器自动记录写操作(增/删/改)与登录/登出,异步写入,失败不阻塞业务。 - 登录日志落库:登录成功与失败均记录(失败附原因),含 IP/UA。
- 新增 seed 脚本:一键初始化租户
touyun、用户touyun(密码Touyun@123)、super_admin角色、全量资源树(菜单+按钮+api)并全授 super_admin。
Capabilities
New Capabilities
backend/auth: 三级鉴权执行语义、super_admin 绕过、登录时权限集入上下文backend/res: 资源表作为 RBAC 授权锚点的运行时语义(权限码 = 资源 code,细粒度domain:action)backend/audit: 审计日志写入(写操作 + 登录/登出,装饰器+拦截器,异步)backend/login: 登录日志写入(成功+失败,IP/UA/失败原因)
Modified Capabilities
(无 —— 本变更不修改 shared 三层主 spec,均为后端新能力)
Impact
- 后端
sources/sysmgr-nest:- 新增 Redis 依赖(ioredis)+ RedisService,权限集存 Redis(key 前缀经
REDIS_KEY_PREFIX隔离多 fork 项目) auth/:permissions.guard 从 Redis 读权限集与 super 标志做判断;auth.service 登录/刷新时聚合权限码写 Redisresources/ users/ roles/ orgs/ dicts/ configs/ tenants/:写接口挂@RequirePermissions+@AuditLog;授权变更后删权限缓存- 新增审计/登录日志写入服务(统一拦截器)
prisma/seed.ts+ package.json seed 脚本
- 新增 Redis 依赖(ioredis)+ RedisService,权限集存 Redis(key 前缀经
- 无 DB schema 变更(表已存在);无 shared spec 变更。
- 新增基础设施依赖:Redis(Docker 常驻,key 前缀隔离多项目)。
- 前端不受影响:权限码由资源表下发,前端菜单/按钮后续按此渲染。