上线阻断项,来自 framework 授权全生命周期缺口地图 objectstack-ai/objectstack#2561(2026-07-04 优先级重排中由 P1 升 P0)。决策归属:framework docs/adr/0086-*(framework PR #2559)——本 issue 不重新决策,按 ADR-0086 P0 执行。
问题(两个真实事故面)
#2196 落地的 Access 支柱把现有 PermissionMatrixEditPage 原样嵌入,当前行为(#2196 自己的验证记录可证:「matrix loads showcase_contributor (84 objects, granted counts)」):
- 「84 对象泄漏」:包上下文中打开的 Access 面板列出的是全环境所有对象的权限矩阵,而非本包声明的对象——管理员在包 A 的面板里能看到并误改不属于包 A 的授权(越权数据暴露面);
- 跨包授权数据丢失:保存把权限集整体覆写,其他包贡献的授权切片被一起冲掉(静默数据丢失陷阱)。
要做的(ADR-0086 P0 范围,勿扩)
- Access 矩阵按
{ packageId } 限定作用域:包上下文里只列当前包声明的对象;
- 保存改为切片合并(slice-merge):只写回本包切片,不触碰其他包贡献的行;
- 两个方向都要证明:本包编辑生效 且 其他包切片在保存后原样保留。
验收标准
协调点(重要)
framework 侧的 PermissionSetSchema.packageId + 每记录 managedBy 是 ADR-0086 P1(尚未落地,见 framework#2561)。若 UI 切片合并依赖记录级 packageId 才能实现,先确认能否用包 manifest 声明的对象清单做作用域(P0 最小实现);记录级来源轴等 framework P1 落地后再收紧。不确定时在本 issue 提问,不要自行改 framework 侧 schema。
关联
上线阻断项,来自 framework 授权全生命周期缺口地图 objectstack-ai/objectstack#2561(2026-07-04 优先级重排中由 P1 升 P0)。决策归属:framework
docs/adr/0086-*(framework PR #2559)——本 issue 不重新决策,按 ADR-0086 P0 执行。问题(两个真实事故面)
#2196 落地的 Access 支柱把现有
PermissionMatrixEditPage原样嵌入,当前行为(#2196 自己的验证记录可证:「matrix loadsshowcase_contributor(84 objects, granted counts)」):要做的(ADR-0086 P0 范围,勿扩)
{ packageId }限定作用域:包上下文里只列当前包声明的对象;验收标准
type-check0 errors,现有测试不回归。协调点(重要)
framework 侧的
PermissionSetSchema.packageId+ 每记录managedBy是 ADR-0086 P1(尚未落地,见 framework#2561)。若 UI 切片合并依赖记录级packageId才能实现,先确认能否用包 manifest 声明的对象清单做作用域(P0 最小实现);记录级来源轴等 framework P1 落地后再收紧。不确定时在本 issue 提问,不要自行改 framework 侧 schema。关联