本卡屬 FR-132(母卡 CM-2510),A.2 資料地基第 3 張。依賴:T-1.6。建議 model:sonnet。
三件小事打地基:① 部門表 org_units.path(例 /10/12/)是「上層部門指派涵蓋子部門」的比對基礎,path 錯了子樹比對會靜默算錯,要掃一次保證每列有值、格式一致。② 加租戶層部門隔離開關 org_unit_isolation,預設關,升級無感。③ 加一個「能力點清單版本號」整數,之後快取鍵要用它——新增或改名能力點時加一,舊快取自然失效。
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/sql/<日期>-fr132-org-path-isolation-flag.sql 新 migration
~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/jedi_iam/infra/models/org_unit.py:17,32 path 欄+索引 (tenant_id, path)
~/Projects/Jedicogy/module/jedi-python-package/jedi-common/jedi_common/session/database/db.py:205-209 RLS session 變數注入處(T-3.6 讀開關會用)
/祖先id/.../自己id/),與現值不同或為空的 UPDATE;結尾自檢「每列 path 非空、以 / 開頭結尾、最後一段等於自己 id」,不符 RAISE。先 \d+ org_units 確認 parent 欄名。tenants 加欄 org_unit_isolation boolean NOT NULL DEFAULT false,或 system_configs 一列——判準是 T-3.6 開 session 時讀取成本(每個請求都要讀一次)。建議 tenants 加欄(開 session 時已知 tenant_id,一次主鍵查詢)。若選別的,回寫理由。system_configs 一列或獨立小表 capability_catalog_version(version int),二選一並回寫理由。初值 1。先 grep 既有 system_configs 的 key 命名慣例。/id/…/;開關欄存在且全為 false;版本號存在。SELECT id, path FROM org_units WHERE path IS NULL OR path !~ '^/([0-9]+/)+$'; 回 0 列。SELECT id, org_unit_isolation FROM tenants; 全為 f。scripts/sql/,檔頭 -- Date:、每語句日期註解;新表 GRANT ... TO cm_app 與 sequence 權限;收尾 INSERT public.schema_migrations;一律 psql --single-transaction -v ON_ERROR_STOP=1 -f <檔> 用 cmmgr 套(cm_app 受 RLS 會 silent fail)。細節走 sql-migration skill。