本卡為 FR-132 母案。把公司層權限補成 Azure 式「誰 × 角色 × 範圍 × 時效」,5 個子需求、31 張子卡(A.1 盤點只讀、A.2~A.5 實作)。子卡清單在末段。
Guidant AI 今天的權限是「管理員建角色、在角色上勾能力點(系統裡「可以做某件事」的最小單位)、再把角色派給人」。骨架都在,但有幾件事只做了一半:派角色時可以選部門、選起訖日,系統卻不看;有 33 支 API 只要登入就能用;角色只能一格一格勾,沒有「整個模組」「全部唯讀」的寫法,也不能搬到別的環境。
這系列把它補成像 Azure 那樣的四段模型:誰(使用者)×角色(一組能力點,支援萬用字元如 grc.*.*、*.*.read)×範圍(整個租戶或某個部門)×時效(每筆指派的起訖日)。另外新做一個「存取管理」模組四頁(角色、指派、檢查存取、使用者),加一個預設關閉的「部門資料隔離」開關給需要部門互不相見的客戶。
專案內成員角色(manager/reviewer/auditor/viewer)的合併是另一個需求 FR-B,本案不做,只預留欄位。
user_roles 有部門欄,判定只比租戶——指到某部門的角色在整個租戶都有效,且無錯誤訊息(jedi-iam infra/repository/user_role_repo_impl.py:81-101)。active_role_conditions.py:19-39),畫面只開了帳號層的生效/到期日(FE UserMTRBACForm.vue:489,501)。is_admin 欄位不過濾已到期、已停用的指派(app/service/user_service.py:522-529,547、middleware/jwt_mw.py:79),過期管理員仍看得到管理頁入口。/auth/role-manage、/auth/user-manage 等四條路由。role_capability_patterns(role_id, pattern) 為判定來源;舊表 role_capabilities 並存一版後退役,回滾不必動資料。*.*.* 內建、不可刪改、每租戶必有;稽核主管/稽核員/唯讀(*.*.read)是出貨範例,可改可刪可複製。is_admin 旗標保留:判斷管理員只看旗標,不看是否持有 *.*.*(用能力點反推管理員已實際踩過坑)。is_admin claim、判定四者吃同一份「有效指派+展開結果」,順便修掉兩個資安漏洞。