概述
平台授权在整个生命周期上的全部已知缺口 的总追踪 issue —— 覆盖包开发、分发安装、环境组合、运行时强制、生产/企业加固五个阶段。源自 #2557 / ADR-0086(PR #2559 )工作中同步完成的全生命周期评估。
核心结论: 运行时强制层已相当扎实(约 18 个原语已强制,由 ADR-0056 D10 一致性矩阵在 CI 中守护)。缺口集中在两头 ——包开发端与生产/企业端。
🏁 收尾更新(2026-07-15,最终账本校正):本地图使命完成。 P0(3/3)· P1(3/3)全部合并;P2 除「groups + 减法 muting(deferred)」外全部落地;P3 中委派管理、合规裁决、SSO 已解决或超额完成。剩余未勾项均为 deferred / evidence-gated,各条已注明去向;授权后续开发已整体迁移至 #2920 (双轨任务:ADR-0095 授权内核链 + ADR-0090 权限模型 v2 地基/补齐轨)。
账本更正 ① :P2「两道门分离」实际经 Showcase redesign: six-domain layout, registry-driven coverage, capability-map tour #2619 (31faea1)落地——此前评论误引 PR feat(security): 权限集「两道门」分离 — 包门发布物化 + 管理门写门 (ADR-0086 P2) #2573 / commit 9796e7c(本仓库历史中不存在),以 Showcase redesign: six-domain layout, registry-driven coverage, capability-map tour #2619 为准。
账本更正 ② :[security][P2] Per-org / per-user IP allow-list (record-level allowed_ip_ranges) — ADR-0069 D5 #2571 (per-org/per-user IP 白名单)于 2026-07-15 以「无业务需求」关闭,未实现(not planned) ——非国际标准/合规要求,属需求驱动的企业 B2B 卖点;组合语义设计意见(收紧/交集,不可放宽平台边界)已备案在 [security][P2] Per-org / per-user IP allow-list (record-level allowed_ip_ranges) — ADR-0069 D5 #2571 评论,待真实多租户客户诉求出现再重开。
仍开放的关联安全缺口 :[security] Anonymous posture inconsistent across surfaces: dispatcher /graphql and raw hono /data bypass requireAuth (/meta now gated) #2567 (anonymous 门跨面一致性:/meta、dispatcher /graphql、raw hono /data 绕过 enforceAuth)——地图关联项中唯一未处理的真实缺口,建议纳入 tracking(authz): 双轨赛道下的授权改进开发任务 v2(内核链 ADR 待编号 + 补齐轨 + 地基) #2920 或单独排期。
✅ 状态更新(2026-07-04 收尾):所有 P0 关闭,P1 全部落地,P2 里三项已完成。上线所需的授权 + 认证能力已就绪。
📌 优先级重排(2026-07-04,面向本次生产上线)
本次上线不评估 AI 相关能力 :ADR-0086 objectui 升 P0;强制 agent visibility(#1901 )降 P3(唯一 AI 专属项);其余不变。
P0 — 上线阻断(全部关闭 ✅)
P1 — 高优先级(生产必需,全部落地 ✅)
P2 — 模型完备性(6.5/7 ✅)
两道门分离 —— 已合并(framework Showcase redesign: six-domain layout, registry-driven coverage, capability-map tour #2619 + objectui#2225;文档同步 docs(authz): 两道门分离已落地(从 roadmap 缺口移到 provenance 章节 · ADR-0086 P2) #2580 ) :块1 包门发布物化(publishMetaItem 通用物化器 → 已发布 permission 元数据 upsert 进 sys_permission_set,managed_by:'package'+package_id);块2 管理门数据层写门硬拒绝(置于空主体 fall-open 之前,超级用户亦挡,isSystem 短路不自锁);objectui 包 Access 门改 mode:'draft' + 随包 Publish 发布。单测 + showcase dogfood 全绿。→ ADR-0086 P2 / D6–D7(注:早期评论误引 feat(security): 权限集「两道门」分离 — 包门发布物化 + 管理门写门 (ADR-0086 P2) #2573 /9796e7c,以 Showcase redesign: six-domain layout, registry-driven coverage, capability-map tour #2619 /31faea1 为准)
权限集组(groups)+ 减法 muting —— 捆绑 + 显式 deny 层,唯一未开工的 P2 项 ,ADR 明确 deferred。muting 落地时必须覆盖字段授权(FLS 并集同根,ADR-0066 ⑧)。 → ADR-0066 ⑦、ADR-0086 P2;后续归属:Permission Model v2 语境(epic Permission Model v2 — named follow-up ADRs (post-ADR-0090 parking lot) #2776 / 总纲 tracking(authz): 双轨赛道下的授权改进开发任务 v2(内核链 ADR 待编号 + 补齐轨 + 地基) #2920 )
按操作粒度的 requiredPermissions —— 已合并(feat(spec,security,lint): ADR-0066 authoring surface — per-operation requiredPermissions (⑤) + capability-reference lint (⑨) #2690 ) :对象 requiredPermissions 支持 string[](全 CRUD)或 {read,create,update,delete} 按操作映射;transfer/restore→update、purge→delete;数组形式语义不变(向后兼容)。→ ADR-0066 ⑤
能力注册表(字符串 → 记录) —— 主体已落地 :sys_capability 对象 + 向后兼容 seeding、内置能力表上移 spec 单一真源、⑨ 授权/发布期 lint validateCapabilityReferences(feat(spec,security,lint): ADR-0066 authoring surface — per-operation requiredPermissions (⑤) + capability-reference lint (⑨) #2690 );包级 capability 声明 API 带 managed_by:'package' provenance(feat(spec,plugin-security): A5 — 包级 capability 声明 API (#2920) #2932 ,A5)。剩余仅 systemPermissions/requiredPermissions 的 string→引用解析迁移,随 ADR-0094 方向在 tracking(authz): 双轨赛道下的授权改进开发任务 v2(内核链 ADR 待编号 + 补齐轨 + 地基) #2920 语境推进。→ ADR-0066 D1/⑨
secure-by-default 姿态推广 —— 已合并(feat(platform-objects): secure-by-default posture for sensitive system objects (ADR-0066 ④) #2691 + objectui#2350) :sys_secret/sys_jwks/sys_verification/sys_oauth_*/sys_device_code 翻 access.default:'private'(成员自助对象刻意排除并有反向断言);sys_scim_provider D3 能力门;D10 矩阵行 secure-by-default-posture 钉死;Studio 姿态可视化 + Private 徽章 + 对象设计器 Access 区块(objectui#2350)。→ ADR-0066 D2/④
企业认证 P2 —— 会话生命周期/空闲/并发控制、全局 IP 白名单、多节点共享限流 store(feat(auth): shared cross-node rate-limit + session store via cache service (ADR-0069 D2) #2572 ✅)均已实现。→ ADR-0069 D4–D6。剩余的 per-org/per-user allowed_ip_ranges([security][P2] Per-org / per-user IP allow-list (record-level allowed_ip_ranges) — ADR-0069 D5 #2571 )已于 2026-07-15 以「无业务需求」关闭(未实现,not planned) ,设计意见已备案待重开。
权限解析可观测性 —— 已合并(fix(security): surface swallowed permission-set resolution failures (#2565) #2568 ) :resolvePermissionSets 吞异常改为 fail-closed + warn 日志。→ [security][observability] resolvePermissionSets swallows dbLoader failures silently — custom permission sets vanish with no log #2565 ✅
P3 — 企业 / 合规纵深(3/5 ✅)
强制 agent visibility —— AI 专属项,仍未强制;refactor(spec): remove dead compliance subsystems (ADR-0056 D8) + mark agent visibility EXPERIMENTAL (#1901) #2693 已给 schema/编辑表单加 [EXPERIMENTAL — NOT ENFORCED] 标注 + 矩阵 agent-visibility experimental 行(access/permissions 已在 [P0][security] Agent access control is a no-op (permissions/visibility/access) #1884 强制,仅 visibility 未强制);强制待 agent listing 面具备 owner/org 语义(ADR-0095 B2 的 EXTERNAL posture 档位在铺路)。→ [P2][security] Enforce agent visibility (organization/private) — context now has tenant (ADR-0095); needs owner/org anchor on the agent #1901
委派管理(delegated admin) —— 已超额落地(ADR-0090/0091 波次) :ADR-0090 P3 D12 委派管理(feat(security)!: ADR-0090 P3 — security publish linter (D7), delegated administration (D12), BU assignment anchor #2711 )+ ADR-0091 L1 授权有效期窗口(feat(security): ADR-0091 L1 — grant validity windows with resolution-time filtering #2795 )、L2 职务代理(feat(security): ADR-0091 L2 — delegation of duty (职务代理) #2810 )+ Setup 独立 explain/matrix/delegated-admin 页面(docs(permissions),feat(setup-nav): standalone explain/matrix/delegated-admin pages, last "Roles" label → Positions, objectui pin bump #2759 )。→ ADR-0066 [WIP] Create a new release version #9
合规子系统 —— 已裁决(refactor(spec): remove dead compliance subsystems (ADR-0056 D8) + mark agent visibility EXPERIMENTAL (#1901) #2693 ,ADR-0056 D8「强制 or 移除」) :GDPR/HIPAA/PCI 合规配置、role-based data masking、全局 RLSConfig/RLSAuditEvent 移除 ×3 (声明过、从未强制、无运行时消费,changeset 带 FROM→TO 迁移);字段静态加密(EncryptionConfigSchema)保留 ×1 继续 [EXPERIMENTAL](真实路线图项);裁决全部记入 D10 矩阵。
SSO 扩展 —— 实现超出原范围 :OIDC RP、SAML 、SCIM 均已经 @better-auth/sso / scim 落地(auth-manager.ts),超出 ADR-0069 对 P3 的原始 defer(原设想仅"SAML 评估、SCIM 立 ADR")。剩余仅 settings-manifest 形式的信任列表 UI polish(现走 sys_sso_provider 记录 + action,不阻断、暂无追踪 issue)。→ ADR-0069 P3
能力进表达式面 —— 未动:CEL current_user 能力检查。→ ADR-0066 ⑥、ADR-0068 EvalUser(注:explain 引擎 record 粒度扩展 feat(spec): C2-α — explain 契约扩展到 record 粒度 (#2920) #2928 /feat(plugin-security): C2-β — explain 引擎 record 粒度行级归因 (#2920) #2939 是另一条线,不覆盖本项)
依据来源 / 关联
CI 守护的已落地状态:packages/dogfood/test/authz-conformance.matrix.ts(ADR-0056 D10)
ADR:0049、0054、0056、0057、0066(含 2026-07-04 补记 ⑧⑨)、0068、0069(状态→Accepted)、0078、0086;后续波次:0090(Permission Model v2)、0091(delegation)、0094、0095(授权内核链)
Issue:[P0][security] Permission lifecycle ops ungated (allowTransfer/allowRestore/allowPurge) #1883 (仍 open)、[P2][security] Enforce agent visibility (organization/private) — context now has tenant (ADR-0095); needs owner/org anchor on the agent #1901 (P3,仍 open)、Design: authorization model — metadata vs environment-config boundary + cross-package composition #2557 、[security][observability] resolvePermissionSets swallows dbLoader failures silently — custom permission sets vanish with no log #2565 (fix(security): surface swallowed permission-set resolution failures (#2565) #2568 ✅)、[security] Anonymous posture inconsistent across surfaces: dispatcher /graphql and raw hono /data bypass requireAuth (/meta now gated) #2567 (anonymous 门跨面一致性,仍 open——唯一未处理的关联安全缺口) 、[security][P2] Per-org / per-user IP allow-list (record-level allowed_ip_ranges) — ADR-0069 D5 #2571 (per-org IP,2026-07-15 无业务需求关闭,not planned )、objectui#2221 / fix(objectql): findData 返回真实 total/hasMore (#2212) #2222 (P0 ✅)
后续总纲:tracking(authz): 双轨赛道下的授权改进开发任务 v2(内核链 ADR 待编号 + 补齐轨 + 地基) #2920 (双轨 v2:ADR-0095 内核链 B 组 + 地基 A 组 + 企业补齐 C 组;A3/A4/A5/B1/B2+B4/C2 等已于 2026-07-14/15 大量合并)+ epic Permission Model v2 — named follow-up ADRs (post-ADR-0090 parking lot) #2776 (Permission Model v2 parking lot)
已合并 PR — 首轮(上线收尾 6 个) :feat(security)!: secure-by-default requireAuth flip + RBAC gates for transfer/restore/purge (#2561 P0) #2562 (P0×2)· feat(security): permission-set package provenance + bootstrapDeclaredPermissions (ADR-0086 P1) #2566 (ADR-0086 P1)· fix(security): surface swallowed permission-set resolution failures (#2565) #2568 (可观测性 [security][observability] resolvePermissionSets swallows dbLoader failures silently — custom permission sets vanish with no log #2565 )· docs(concepts): Authorization Architecture overview (#2561 P1) #2569 (综述文档)· feat(auth): last-login audit fields + ADR-0069 status (P1 completion) #2570 (企业认证 last-login + ADR-0069 Accepted)· feat(auth): shared cross-node rate-limit + session store via cache service (ADR-0069 D2) #2572 (多节点共享限流 store)· objectui#2222(ADR-0086 P0)
已合并 PR — 第二轮(P2/P3 收敛) :Showcase redesign: six-domain layout, registry-driven coverage, capability-map tour #2619 (两道门分离 framework)· objectui#2225(两道门 objectui)· docs(authz): 两道门分离已落地(从 roadmap 缺口移到 provenance 章节 · ADR-0086 P2) #2580 (文档同步)· feat(spec,security,lint): ADR-0066 authoring surface — per-operation requiredPermissions (⑤) + capability-reference lint (⑨) #2690 (⑤ 按操作 requiredPermissions + ⑨ 能力引用 lint)· feat(platform-objects): secure-by-default posture for sensitive system objects (ADR-0066 ④) #2691 (④ secure-by-default 系统对象切片)· refactor(spec): remove dead compliance subsystems (ADR-0056 D8) + mark agent visibility EXPERIMENTAL (#1901) #2693 (D8 诚意债裁决 + [P2][security] Enforce agent visibility (organization/private) — context now has tenant (ADR-0095); needs owner/org anchor on the agent #1901 标注)· objectui#2350(④ 可视化 + ⑤/⑨ 授权 UX)
已合并 PR — 第三轮(ADR-0090/0091 波次,超额完成 P3 委派管理) :feat(security)!: ADR-0090 P3 — security publish linter (D7), delegated administration (D12), BU assignment anchor #2711 (D12 委派管理)· feat(security): ADR-0091 L1 — grant validity windows with resolution-time filtering #2795 (ADR-0091 L1)· feat(security): ADR-0091 L2 — delegation of duty (职务代理) #2810 (ADR-0091 L2 职务代理)· docs(permissions),feat(setup-nav): standalone explain/matrix/delegated-admin pages, last "Roles" label → Positions, objectui pin bump #2759 (Setup 页面)· feat(spec,plugin-security): A5 — 包级 capability 声明 API (#2920) #2932 (A5 包级 capability 声明 API)
概述
平台授权在整个生命周期上的全部已知缺口的总追踪 issue —— 覆盖包开发、分发安装、环境组合、运行时强制、生产/企业加固五个阶段。源自 #2557 / ADR-0086(PR #2559)工作中同步完成的全生命周期评估。
核心结论: 运行时强制层已相当扎实(约 18 个原语已强制,由 ADR-0056 D10 一致性矩阵在 CI 中守护)。缺口集中在两头——包开发端与生产/企业端。
P0 — 上线阻断(全部关闭 ✅)
transfer/restore/purge补 RBAC 门 —— 已合并(feat(security)!: secure-by-default requireAuth flip + RBAC gates for transfer/restore/purge (#2561 P0) #2562):三操作预映射到权限位 +modifyAllRecords旁路;审查中补齐行级防护(RLS 预镜像 / controlled-by-parent 覆盖破坏性操作类)。→ [P0][security] Permission lifecycle ops ungated (allowTransfer/allowRestore/allowPurge) #1883(开启追踪 M2 操作,本体仍 open){ packageId }限定作用域 + 保存切片合并;关闭「84 对象泄漏」+ 跨包数据丢失;带中途迁移守卫,对齐 framework feat(security): permission-set package provenance + bootstrapDeclaredPermissions (ADR-0086 P1) #2566 的记录级package_id。requireAuth安全默认翻转 —— 已合并(feat(security)!: secure-by-default requireAuth flip + RBAC gates for transfer/restore/purge (#2561 P0) #2562):specdefault(true)+ rest?? true,显式退出 boot warn;一致性矩阵requireAuth-default-flip→ enforced;浏览器实测 401/200/201 闭环;ObjectStackDefinitionSchema.api让 defineStack 层退出开关生效。→ ADR-0056 D2P1 — 高优先级(生产必需,全部落地 ✅)
PermissionSetSchema.packageId+ 每记录managedBy+sys_permission_set.package_id/managed_by列;bootstrapDeclaredPermissions播种stack.permissions(幂等/升级感知/不沾染环境行);一致性矩阵行declarative-permission-seeding+ dogfood 证明;关闭 ADR-0078 惰性违规。content/docs/concepts/authorization.mdx,九份 ADR 缝成单篇(六道强制门链 + 组合语义 + 包来源 + 生命周期五阶段 + CI 治理)。P2 — 模型完备性(6.5/7 ✅)
publishMetaItem通用物化器 → 已发布permission元数据 upsert 进sys_permission_set,managed_by:'package'+package_id);块2 管理门数据层写门硬拒绝(置于空主体 fall-open 之前,超级用户亦挡,isSystem短路不自锁);objectui 包 Access 门改mode:'draft'+ 随包 Publish 发布。单测 + showcase dogfood 全绿。→ ADR-0086 P2 / D6–D7(注:早期评论误引 feat(security): 权限集「两道门」分离 — 包门发布物化 + 管理门写门 (ADR-0086 P2) #2573/9796e7c,以 Showcase redesign: six-domain layout, registry-driven coverage, capability-map tour #2619/31faea1为准)requiredPermissions—— 已合并(feat(spec,security,lint): ADR-0066 authoring surface — per-operation requiredPermissions (⑤) + capability-reference lint (⑨) #2690):对象requiredPermissions支持string[](全 CRUD)或{read,create,update,delete}按操作映射;transfer/restore→update、purge→delete;数组形式语义不变(向后兼容)。→ ADR-0066 ⑤sys_capability对象 + 向后兼容 seeding、内置能力表上移 spec 单一真源、⑨ 授权/发布期 lintvalidateCapabilityReferences(feat(spec,security,lint): ADR-0066 authoring surface — per-operation requiredPermissions (⑤) + capability-reference lint (⑨) #2690);包级 capability 声明 API 带managed_by:'package'provenance(feat(spec,plugin-security): A5 — 包级 capability 声明 API (#2920) #2932,A5)。剩余仅systemPermissions/requiredPermissions的 string→引用解析迁移,随 ADR-0094 方向在 tracking(authz): 双轨赛道下的授权改进开发任务 v2(内核链 ADR 待编号 + 补齐轨 + 地基) #2920 语境推进。→ ADR-0066 D1/⑨sys_secret/sys_jwks/sys_verification/sys_oauth_*/sys_device_code翻access.default:'private'(成员自助对象刻意排除并有反向断言);sys_scim_providerD3 能力门;D10 矩阵行secure-by-default-posture钉死;Studio 姿态可视化 + Private 徽章 + 对象设计器 Access 区块(objectui#2350)。→ ADR-0066 D2/④allowed_ip_ranges([security][P2] Per-org / per-user IP allow-list (record-levelallowed_ip_ranges) — ADR-0069 D5 #2571)已于 2026-07-15 以「无业务需求」关闭(未实现,not planned),设计意见已备案待重开。resolvePermissionSets吞异常改为 fail-closed + warn 日志。→ [security][observability] resolvePermissionSets swallows dbLoader failures silently — custom permission sets vanish with no log #2565 ✅P3 — 企业 / 合规纵深(3/5 ✅)
visibility—— AI 专属项,仍未强制;refactor(spec): remove dead compliance subsystems (ADR-0056 D8) + mark agent visibility EXPERIMENTAL (#1901) #2693 已给 schema/编辑表单加[EXPERIMENTAL — NOT ENFORCED]标注 + 矩阵agent-visibilityexperimental 行(access/permissions已在 [P0][security] Agent access control is a no-op (permissions/visibility/access) #1884 强制,仅visibility未强制);强制待 agent listing 面具备 owner/org 语义(ADR-0095 B2 的 EXTERNAL posture 档位在铺路)。→ [P2][security] Enforce agentvisibility(organization/private) — context now has tenant (ADR-0095); needs owner/org anchor on the agent #1901EncryptionConfigSchema)保留 ×1 继续[EXPERIMENTAL](真实路线图项);裁决全部记入 D10 矩阵。@better-auth/sso/scim落地(auth-manager.ts),超出 ADR-0069 对 P3 的原始 defer(原设想仅"SAML 评估、SCIM 立 ADR")。剩余仅 settings-manifest 形式的信任列表 UI polish(现走sys_sso_provider记录 + action,不阻断、暂无追踪 issue)。→ ADR-0069 P3current_user能力检查。→ ADR-0066 ⑥、ADR-0068EvalUser(注:explain 引擎 record 粒度扩展 feat(spec): C2-α — explain 契约扩展到 record 粒度 (#2920) #2928/feat(plugin-security): C2-β — explain 引擎 record 粒度行级归因 (#2920) #2939 是另一条线,不覆盖本项)依据来源 / 关联
packages/dogfood/test/authz-conformance.matrix.ts(ADR-0056 D10)visibility(organization/private) — context now has tenant (ADR-0095); needs owner/org anchor on the agent #1901(P3,仍 open)、Design: authorization model — metadata vs environment-config boundary + cross-package composition #2557、[security][observability] resolvePermissionSets swallows dbLoader failures silently — custom permission sets vanish with no log #2565(fix(security): surface swallowed permission-set resolution failures (#2565) #2568 ✅)、[security] Anonymous posture inconsistent across surfaces: dispatcher /graphql and raw hono /data bypass requireAuth (/meta now gated) #2567(anonymous 门跨面一致性,仍 open——唯一未处理的关联安全缺口)、[security][P2] Per-org / per-user IP allow-list (record-levelallowed_ip_ranges) — ADR-0069 D5 #2571(per-org IP,2026-07-15 无业务需求关闭,not planned)、objectui#2221 / fix(objectql): findData 返回真实 total/hasMore (#2212) #2222(P0 ✅)visibility(organization/private) — context now has tenant (ADR-0095); needs owner/org anchor on the agent #1901 标注)· objectui#2350(④ 可视化 + ⑤/⑨ 授权 UX)