Skip to content

plugin-auth: break-glass 守卫 —— SCIM/ban 不得停用最后一个管理员(ADR-0024 D5.2,cloud#621 转入) #5892

Description

@claude

来源:跨座位转移件。 Part of objectstack-ai/cloud#621(Enterprise Identity SCIM — V1 follow-ups)的第 1 项。cloud#621 的其余各项留在 cloud 队列;这一项落点在本仓(packages/plugins/plugin-auth),按 One-main-backlog 规则转来。

设计依据:ADR-0024 D5.2(cloud ADR-0071 的 SCIM V1 已落地,机制在 framework plugin-auth,OS_SCIM_ENABLED 默认关)。原单把本项标为 non-negotiable。

问题

SCIM / ban 路径必须永远不能停用环境 owner 或最后一个本地管理员。一次 IdP 误配置、或一次过宽的 deprovision,就足以让整个组织把自己锁在门外 —— 而 SCIM 的写入是外部系统驱动的,没有人在回车前看一眼。

要求(照抄原单)

  1. sys_user 的 beforeUpdate 钩子:当一次更新会导致剩余 0 个未被 ban 的管理员时,拒绝 banned=true;
  2. enforced SSO 模式不得停用最后一个本地管理员的密码 —— 这是 IdP 故障时的逃生口;
  3. 测试:尝试 ban 最后一个管理员 → 被拒;IdP 故障路径下 owner 的本地登录仍可用。

⚠️ 派发前必做的前提核对(分诊座位已做一轮,结论是「部分可能已存在」)

origin/main 上 packages/plugins/plugin-auth/src/auth-manager.ts 已经有 break-glass 相关代码,但只覆盖密码那一半:

:1241   // env owner / a local admin keeps one as the break-glass escape hatch
:3846   * owner back, so the break-glass admin never loses self-service password

⇒ 第 2 项(密码逃生口)看起来已有实现;而第 1 项(ban 守卫)未搜到对应逻辑 —— 未命中「剩余 0 个未 ban 管理员则拒绝」这一形状的判定。

⛔ 请 dev 在动手前逐条复核这三项的现状,只实现真正缺失的部分:范围可能显著小于正文。核对方法用 git grep <pattern> origin/main -- packages/plugins/plugin-auth,⛔ 不要在共享主检出的工作树里 grep(它的 HEAD 由别的 agent 摆布,可能落后数十提交)。

相关


Generated by Claude Code

Activity

  1. self-assigned this
    on Aug 6, 2026
  2. baozhoutao commented on Aug 6, 2026

    @baozhoutao
    Contributor

    认领:PM 循环第 5 轮(domain:identity 车道)
    会话:session_01JwwiU9bjhwy2SWj13ho8uv
    分支:claude/issue-5892-last-admin-breakglass
    Worktree:objectstack-issue-5892
    域:domain:identity
    文件面:packages/plugins/plugin-auth/**(守卫实现 + 测试;相邻既有面 identity-write-guard.test.ts / auth-manager.ts break-glass 段)+ .changeset/*;⛔ 触碰 @better-auth/scim 模型面即停(那一刻 #3653 成为前置)

    PM 已于 origin/main 复核前提探测:密码逃生口半边已有(auth-manager.ts:1241/:1291/:3846 等),「剩余 0 个未 ban 管理员则拒绝」形状零命中 —— 与分诊「部分可能已存在,只实现真缺的」结论一致,派发令带逐项复核要求。与同批 #5876(plugin-security)/#5860(plugin-audit)不同包不相交。


    Generated by Claude Code

  3. baozhoutao commented on Aug 6, 2026

    @baozhoutao
    Contributor

    复核 ACCEPT(PM,session_01JwwiU9bjhwy2SWj13ho8uv,第 5 轮):交付 PR #5939。

    CI 全绿,转 ready 入合并队列。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions