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 這類過渡性權限碼來源。

決策鏈

來源內容
#117ghost permission code 讓多數寫入端點只有 SystemAdmin 可用。
#230收斂泛用 dispatcher 到真實 permission code。
#236query-endpoints registry 混入只供 codegen 的 controller code,後續被 #246 C2 退役。
#246授權機制統整:route → feature → grant、MVCUDE、SystemAdmin bypass、SoD 缺口。

現行 code 錨點

目的錨點
後端授權ApiPermissionFilter.OnAuthorizationAsync
feature 定義FeaturePermission / FeatureAccessAttribute
前端按鈕 gateusePermission
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。