Commit 6947bec
committed
fix(plugin-auth): break-glass 补上第三条路径 —— 撤销管理员「身份」的写同样被拒 (#5978)
ADR-0024 D5.2 的不变量此前由两个钩子守着,都装在 sys_user 上(ban / delete)。
但「谁是管理员」不存在 sys_user 上 —— 它由 sys_member 与 sys_user_permission_set
推导。第三条写法因此完全绕开两者:用户行原封不动,把管理员身份拿掉。
同形状扩到这两张表的 beforeUpdate/beforeDelete(共六个钩子,同 packageId、同
priority 20)。判据 = 枚举、模拟、再枚举:同一个 resolveAdminUserIds 再跑一遍
写后的行,第二次为空而第一次不为空则拒写。全覆盖(不只自降级)、谓词写做整集
模拟、fail-closed。模拟单向(只拿走身份不授予),取整一律倒向拒写。
等级判定只问 isOrgAdminGrade 这把唯一的尺;有效期按 isGrantActive 原样消费。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JwwiU9bjhwy2SWj13ho8uv1 parent 9e3709a commit 6947bec
4 files changed
Lines changed: 1192 additions & 68 deletions
File tree
- .changeset
- packages/plugins/plugin-auth/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
987 | 987 | | |
988 | 988 | | |
989 | 989 | | |
990 | | - | |
| 990 | + | |
991 | 991 | | |
992 | 992 | | |
993 | 993 | | |
994 | | - | |
995 | | - | |
996 | | - | |
997 | | - | |
998 | | - | |
999 | | - | |
1000 | | - | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
1001 | 1003 | | |
1002 | 1004 | | |
1003 | 1005 | | |
| |||
0 commit comments