Skip to content

tracking(authz): ADR-0099 posture 裁决分级 — P0–P3 实现分期 #3312

Description

@os-zhuang

背景

ADR-0099#3109 合并,maintainer 已同意)定夺:posture 成为分级裁决的唯一输入(D1)、posture→每层动作映射表 + 六条不变量(D2)、EXTERNAL rung 激活链(D3)、拒绝显式 deny(D4)。

本 issue 跟踪其分期实现。严格串行、每期过矩阵门再进下一期;P1/P2 行为保持,P3 需求门控。与 ADR-0096(执行面准入)正交——若 P1–P3 出现 breaking 面,与 0096 D5 翻转共乘同一 major 窗口。

分期

P0 — 矩阵门先行(纯测试,无行为变更)

  • authz-matrix-gate.test.ts 落「探针 vs 携带 rung 等价」格:对每种 seed 主体形态断言 hasPlatformAdminPosture(permissionSets)ctx.posture === 'PLATFORM_ADMIN' 一致
  • I1–I6 不变量格(TENANT_ADMIN 永不越 Layer 0;层内嵌套;仅 resolver 派生;enforcement=explain 同值;只定级不定边;不绕 system-only 写护栏)
  • EXTERNAL 死分支格(fixture 共享下断言「仅显式共享」注入规则,OWD/共享规则不放大)

P1 — Layer 0 豁免门 + explain 收敛(行为保持,#2956 后已解锁)

P2 — Layer 1 短路级判定收敛(行为保持)

  • Layer 1 短路的「级」判定读 posture(>= TENANT_ADMIN);读/写 super 位继续各管各(I5)
  • P0 矩阵全绿证明行为保持

P3 — EXTERNAL rung 激活(需求门控:外部主体类型 / 门户立项,ADR-0090 后续 #6

  • audience:'external'derivePosture 返回 EXTERNAL
  • sharing/RLS 缝隙按 rung 编译「仅显式共享」过滤器(无共享行 → deny 哨兵,fail-closed)
  • 写侧:需含 edit 的显式共享;owner 型共享规则(sharing.zod.ts:104 experimental)保持在 rung 之外直至单独 enforce
  • cloud 多组织 e2e 冒烟(cloud#835 系)追加 EXTERNAL 格

关联

ADR-0099(#3109)· ADR-0095(阶梯,Accepted)· ADR-0096(准入,正交轴)· #2946 Finding 2 / #2949(本 ADR 关闭的分叉类)· #2947#2956(posture 透传,P1 前置)· #2920(B 轨总跟踪,已收口)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions