## 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 登录/刷新时聚合权限码写 Redis - `resources/ users/ roles/ orgs/ dicts/ configs/ tenants/`:写接口挂 `@RequirePermissions` + `@AuditLog`;授权变更后删权限缓存 - 新增审计/登录日志写入服务(统一拦截器) - `prisma/seed.ts` + package.json seed 脚本 - 无 DB schema 变更(表已存在);无 shared spec 变更。 - 新增基础设施依赖:Redis(Docker 常驻,key 前缀隔离多项目)。 - 前端不受影响:权限码由资源表下发,前端菜单/按钮后续按此渲染。