issue 246 RBAC 退役權限碼決策鏈
這頁保留 RBAC ghost permission code 到 MVCUDE 模型的 source。穩定規則看 RBAC 授權權威與現況。
最終結論
早期泛用 dispatcher 會推到不存在或未授權的 ghost permission code,導致非 SystemAdmin 實際 403。後續先在 #230 收斂一批真碼,再由 #246 統整成 route → feature → grant 的 MVCUDE 模型,退役 query-endpoints registry 這類過渡性權限碼來源。
決策鏈
| 來源 | 內容 |
|---|
| #117 | ghost permission code 讓多數寫入端點只有 SystemAdmin 可用。 |
| #230 | 收斂泛用 dispatcher 到真實 permission code。 |
| #236 | query-endpoints registry 混入只供 codegen 的 controller code,後續被 #246 C2 退役。 |
| #246 | 授權機制統整:route → feature → grant、MVCUDE、SystemAdmin bypass、SoD 缺口。 |
現行 code 錨點
| 目的 | 錨點 |
|---|
| 後端授權 | ApiPermissionFilter.OnAuthorizationAsync |
| feature 定義 | FeaturePermission / FeatureAccessAttribute |
| 前端按鈕 gate | usePermission |
| route 守衛 | auth.global.ts |
| menu 可見性 | MenuService.GetUserMenuAsync |
驗證錨點
| 驗證 | 結論 |
|---|
Verify-RbacRoleMatrix.cs | 釘住角色/feature/op 的授權矩陣。 |
| RBAC 授權權威與現況 | 已整理 #246 的現行權威規則。 |
注意事項
- 不要再從
query-endpoints 或舊 controller code 推導現行授權。
- 「SystemAdmin 可以」不代表一般角色授權正確;SystemAdmin bypass 會遮住 grant 問題。
- 遇到 ghost code 先回 #246 對照退役碼與 MVCUDE feature。