## 现状 POST /api/v1/access/decide(http.auth.decide.v1,#1863/BR-004)的请求体只携带 `action` + 可选 `resource`,前端 `<Can>` 组件据此问「当前用户可否执行 <action>」。 - 证据:`contracts/http/auth/decide/v1/request.schema.json:6`(request 仅 `action`/`resource`);`corecells/accesscore/.../identitymanage`:`PermUserWrite` 同时用于 `auth.RequirePermission(...)` 的 admin-only gate 与 `auth.RequirePermissionForResource("id", ...)` 的 owner-scoped gate。 - 三维根因: - 代码:permission 是 coarse action,不是 route/operation identity;同一 permission 可挂在不同形状的 route gate 上。 - 架构:decide API 把 PDP 当作「真实 route gate 的精确 oracle」,但 PDP 只回答 coarse/owner 级 permission 问题,二者不等价(系统性:`PermUserWrite` 至少同时服务 admin-only 与 owner-scoped 两类 gate)。 - 历史:对标 Cedar(principal/action/resource/context 建模)、OPA Envoy(HTTP method/path/body 真实请求上下文)、Spring Security `AuthorizationManager<T>`(针对具体 object 授权)——业界 decide 输入都比 coarse action 更具体。 - 影响范围: - 直接:前端按 `user:write + self resource` 可能得 `allowed=true`,但对应按钮若调用 create/delete/lock/unlock 等 admin-only route,实际仍 403——授权 UI 与后端实际 403 分裂。 - 间接:任何「同一 permission 覆盖多形状 route gate」的端点都有同样误判面。 - 同类:`PermUserWrite`(admin-only + owner-scoped)已确认;其余混合 permission 需 Grep 复核。 ## 修复方向 三级方案种子(review F2 详表): - 最小:在 `request.schema.json` / `contract.yaml` 显式声明 decide 只回答 coarse/owner 决策,前端不得用它推断 admin-only operation(纯文档/契约约束,不改 wire 语义)。 - 彻底:request 增加 `operation` / `contractId`,按真实 route gate(method+path+对应 permission/owner 形状)决策,使 decide 输出与实际 403 等价。 - 重构:拆分混合 permission(如 owner write 与 admin account-management 分离),让每个 permission 对应单一 route gate 形状,从根上消除「一 permission 多形状」歧义。 > 注:方案涉及 wire contract 破坏式变更(pre-GA 窗口内可原地改 active 版本,但须完成契约扇出闭环 + PR 说明动机),且「拆分混合 permission」牵动现有 gate 接线,属设计级(Cx4),需人工裁决方案档位。 ## Files - contracts/http/auth/decide/v1/request.schema.json:6 - contracts/http/auth/decide/v1/contract.yaml - corecells/accesscore/slices/authorizationdecide/handler.go - corecells/accesscore/slices/identitymanage/(PermUserWrite 双形状 gate) ## Source PR #2300 finding F2 · Discovered via /fix #2300(关联 epic #1863;review 裁决 Cx4 需人工决策,用户裁决:只建 backlog issue,本 PR 不动 decide 契约)
Activity