建議 model:Sonnet 5,effort:medium——policy 寫法有現成樣板,但這三張表在登入/切租戶/權限計算的熱路徑上,寫錯的症狀是「登入後選單全空」,且 user_org_units 沒有 tenant_id 欄位要另想 policy 形狀。本卡屬 FR-094(母卡見兄弟卡段),.2 開隔離的第 2 棒(整案第 4 棒)。無前置棒,可與 .2a 平行。吸收 CM-1445。

問題是什麼(白話)

三張表記的是「誰在哪個租戶有什麼角色」「誰隸屬哪些租戶」「誰屬於哪個部門」——這是全公司的名冊與門禁清單,現在完全沒隔離,任何客戶帳號直查就能看到別家「誰是管理員、誰能切到哪個租戶」。更危險的是 user_tenants 本身就是「切換租戶」合法性的依據,一張控制門禁的表自己沒有門禁。

首腦核對(2026-09-13 DEV localhost 實查):

在哪裡

~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/sql/2026-09-XX-fr094-cm<本卡號>-rls-user-roles-tenants-org-units.sql   (新)本棒 migration
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/sql/manifest.tsv                              加一列
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/init/02-schema.sql:15506,15555,15664         三張表定義
~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/jedi_iam/middleware/context.py:60                  default_membership_check(切租戶讀 user_tenants)
~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/jedi_iam/infra/repository/user_role_repo_impl.py:81-87   授權查詢 JOIN user_roles
~/Projects/Billows/Audit-Manager/compliance-manager-be/scripts/sql/2026-09-12-cm1664-users-rls-self-visible-textcmp.sql   「本人恆可見」分支的寫法(文字比對版,照抄)

怎麼修

要寫測試