本卡屬 FR-132(母卡 CM-2510),A.2 資料地基第 4 張。依賴:T-2.2。建議 model:opus。
今天新裝客戶只拿到一個 Administrator 角色配 123 列能力點;新租戶建一個 System Manager 配全集扣排除清單,外加三個範本角色。這張卡把出貨角色的「來源」改成一份 JSON 檔:系統管理員 *.*.*(內建)+稽核主管、稽核員、唯讀(*.*.read)三個範例,seed、新租戶、既有租戶回補都從這份 JSON 產生,不再各寫一份。
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/init/04-seed-core.sql:62,272- Administrator 角色(id=2)與 123 列 role_capabilities
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/init/gen_capability_seed.sql、gen_seed_sql.sh:86,108,291-327 seed 產生器(名稱反查)與自檢
~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/jedi_iam/app/service/tenant_provisioning_service.py:49,149,156 新租戶建 System Manager 與範本角色
~/Projects/Billows/Audit-Manager/compliance-manager-be/core/role_templates.py 今天三個範本角色(一般成員/稽核人員/唯讀檢視者)
~/Projects/Billows/Audit-Manager/compliance-manager-be/di_containers/auth/auth_containers.py:290 role_templates 注入點
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/init/migrate-capability-grants.sql 既有租戶回補模板(build 產出 _capability_grants.sql)
~/Projects/Billows/Audit-Manager/compliance-manager-be/test/test_role_templates.py 既有範本角色測試
scripts/init/ 下(例 scripts/init/shipped-roles.json),內容以 T-1.6 的 inventory/a1-shipped-roles.json 為準。格式 [{name, description, is_admin, is_system, is_template, capabilities:[pattern]}]。04-seed-core.sql 的 Administrator 改成系統管理員(is_system=true、pattern 一列 *.*.*),加三範例(is_template=true),寫入 role_capability_patterns。改 gen_capability_seed.sql/gen_seed_sql.sh 由 JSON 產生,自檢段(:291-327)同步改。注意 seed 是由產生器重產的,不要只手改 04-seed-core.sql。tenant_provisioning_service 改成建系統管理員 *.*.*+三範例(pattern 寫新表);core/role_templates.py 的 TENANT_ROLE_TEMPLATES 改讀 JSON(或改成 pattern 形式),與 seed 共用同一份來源。先 grep RoleTemplate 在 jedi-iam domain/ports/tenant_provisioning.py 的欄位,必要時加 pattern 欄。migrate-capability-grants.sql 改成寫 pattern(系統管理員已是 *.*.* 就不用逐筆補;範例角色既有租戶不補——今天範本角色也是「只在建租戶當下建一次、既有租戶不補」)。test/test_role_templates.py 改成驗 JSON:每條 pattern 至少命中一個能力點、唯讀角色只含 read、系統管理員只有 *.*.*。is_system 系統管理員+三範例;新建租戶同樣。SELECT name, is_system, is_template FROM roles WHERE tenant_id=<新租戶>; 與其 pattern。scripts/init/init.sh(不碰 188)驗新裝結果——若環境不允許,回寫寫明打折處。