diff --git a/CLAUDE.md b/CLAUDE.md index 2e77a72..2fc08c5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1312,7 +1312,7 @@ - **统一鉴权中心(Keycloak)接入,只做后端**(2026-08-25,ADR-012):资源服务器 —— 后端只验 Bearer JWT (`jose`,RS256 / iss / aud 本地验,不回源);`Staff.id` = `sub`,首登即建、Admin API 同步名册; **权限只到端**:`sys.role_access` 一行一个 realm 角色,运营中心可改(锁死不变量:改完得有人还能进运营中心); - 路由归属写在契约 `access` 上,app 层一处中间件统一判 401/403,治理路由里约 100 处守卫整体删除, + 路由归属写在契约 `access` 上,app 层一处中间件统一判 401/403,治理路由里 59 处守卫整体删除, 覆盖测试 fail-closed;SSE 与下载走 60 秒票据;口令 / 会话表 / 岗位授权退役(八条路由回 410,契约留一轮)。 web 待按前端手册接入,接入前登不进。 diff --git a/apps/api/src/modules/org/CONTRACT.md b/apps/api/src/modules/org/CONTRACT.md index 39d5eb9..447ea2e 100644 --- a/apps/api/src/modules/org/CONTRACT.md +++ b/apps/api/src/modules/org/CONTRACT.md @@ -43,4 +43,4 @@ 影响半径(2026-08-25,ADR-012):contract / port / index 全面重写 —— 退役 `login` `logout` `resolveSession` `setPassword` `authorize` `loadSession` `listGrants` `setGrants` `createStaff` `checkDisable` `disableStaff` `findByAccount` 与 `SessionRepository` `PasswordHasher` `GrantRepository`; - 下游 app(中间件 / 装配 / 路由)与 message 装配同批改,depcruise 已反查确认。 + 下游 app(中间件 / 装配 / 路由)与 message 装配同批改,depcruise 全量校验通过。 diff --git a/docs/adr/ADR-012-keycloak-identity.md b/docs/adr/ADR-012-keycloak-identity.md index 8c38a4e..452adde 100644 --- a/docs/adr/ADR-012-keycloak-identity.md +++ b/docs/adr/ADR-012-keycloak-identity.md @@ -21,7 +21,7 @@ 运营中心可改;一个人的端 = 其角色命中行的并集。缺省 `admin → 三端`,`user → workbench`。 **锁死不变量**:改完至少一名在册活跃员工仍能进运营中心,否则 409。 4. **路由归属进契约**:`RouteContract.access` 必填(public / any / 端 / 端数组);app 层一处中间件 - 按注册表判 401 / 403;治理路由里约 100 处逐条守卫整体删除;覆盖测试 fail-closed。 + 按注册表判 401 / 403;治理路由里 59 处逐条守卫整体删除(governance-ops 45 + governance 14);覆盖测试 fail-closed。 5. **名册**:岗位仍是本系统的表(哨兵岗 `NONE / 未分配`,运营中心指派);名册经 Admin API 同步 (master realm 的 provisioning 服务账号,只要 `view-users`)+ 首登即建。`state` 只由同步置 `disabled`(Keycloak 停用或删除),有效 token 不改它 —— 撤权在同步之后即时 403。 @@ -36,7 +36,7 @@ ## 后果 - 撤角色的时效 ≤ 5 分钟(token 寿命);停用经同步后即时。 -- web 需按《前端接入手册》改造(登录 / Bearer / 401 跳转 / SSE 与下载改走票据 / 入口亮灯改读 `/api/me` 的 `ends`), +- web 需按 `docs/前端对接说明-统一鉴权中心.md` 改造(登录 / Bearer / 401 跳转 / SSE 与下载改走票据 / 入口亮灯改读 `/api/me` 的 `ends`), 改造前登不进 —— 这是「只做后端」的既定后果。 - **部署顺序是先跑迁移、再 `reset-runs`**:迁移 0032 清空 `sys.staff` 并连带清掉两张持有身份的 **配置**表(`sys.node_owner`、`sys.trigger` 的确认位);而 `sys.task.owner_id` 这类**无外键**的