本卡屬 FR-132 A.6(子母卡 CM-2559),CM-2565 拆出的第二棒 M2b。依賴:CM-2565(甲)commit 後才有 v-can 掛點可掃。建議 model:opus。

這一棒在做什麼(白話)

把權限矩陣真的產出來:一支 JSON 寫明「哪一頁、哪個功能點、綁哪顆權限」,從程式產、再反過來核程式。它是設計標準,產品經理和客戶文件都讀它,角色設定頁的樹也改讀它(那是下一棒)。

在哪裡(首腦核過)

CM-2565 runner 實查(不必重查):
- 權限清單在程式碼:core.plugins.PLUGINS + core.host_capabilities.HOST_CAPABILITIES,208 顆;產生器 import 這兩份,不連 DB
- 「頁→進入權限」只在 DB:ui_routes 51 條、route_capabilities 123 筆(每頁 read=ALL、其餘 ANY);程式碼無宣告
- FE 權限來源:userStore.capabilityNames(全集)、capabilityBypass(超管)、useUserUtil().hasCap 唯一出口
- 散寫基線:hasCap( 37 處(33 處字面)、pagePermission.includes 4、can( 9(RoleList/RoleDetail)
- v-can 採編譯期轉換(vite nodeTransforms 把 v-can 改寫成 v-if="$can(X)",原有 v-if 以 AND 合併;$can 掛 globalProperties);Vue 先跑內建 v-if 再跑自訂轉換,要在父節點處理子元素、根節點在 ROOT 層處理;PrimeVue Menu items 掛不了,改 items 過濾並登記豁免
盤點表(功能點文字與多權限語意的對照):docs/features/FR-132-2610-access-management/inventory/a6-button-capabilities.md
後端 route→權限機器清單:scripts/deliverables/collect_route_guards.py(test/security/code/test_route_guard_inventory.py 用它)
甲棒產出:src/config/capabilities.js(CAP 常數)、v-can 轉換、$can、DeviceManage.vue 示範

怎麼做

手測

紀律

補件(首腦,2026-10-07 22:10,承 CM-2564 驗收裁示)

順手調兩條登記(你正在動 ui_routes/route_capabilities):