本卡屬 FR-132 A.6「頁內按鈕照權限隱藏」八棒實作之一(子母卡 CM-2559),照 T-6.2 盤點表(CM-2561)的拆棒把這一塊的寫入類按鈕全部換成 v-can。建議 model:sonnet。
把下面範圍內每一顆「做事」的按鈕(新增、修改、刪除、匯入、匯出、送出、核可、執行…)掛上 v-can,沒權限的人就看不到。權限名照盤點表,不自己判。
views/detection-profile/、views/remote-agent/、views/plugin/、views/scan-zone/、views/cloud-integrations/、views/evidence-classification/
盤點表「detection」「evidence」段
src/config/scanZone.js 常數只有 READ/UPDATE 要補(盤點表「名不對」第三列)。import { CAP } from '@/config/capabilities',元素上 v-can="CAP.X"(任一顆就出現寫陣列、缺一支會做一半寫 { all: [...] })。範本 src/views/device/DeviceManage.vue:22,351-367。不寫字面字串、不新增 hasCap/can/pagePermission 散寫;碰到的舊散寫順手換成 v-can。docs/features/FR-132-2610-access-management/inventory/a6-button-capabilities.md 該模組段,每顆按鈕一列(檔案:行號|按鈕|API|權限|專案層條件|現況)。不自己判斷該給誰;表上查不到的回寫問首腦。writeDisabled() 是授權唯讀,不是權限,照舊。requiredCap 之類 props,元件用 v-can="requiredCap"(變數也可,守衛③認已知變數)。同一元件兩情境(專案/資源庫)由呼叫頁決定傳哪顆。$can(CAP.X)),並在 test/security/code/test_permission_matrix_three_way.py 豁免清單登記型別+理由。test/security/code/test_permission_matrix_three_way.py 的 UNGUARDED_WRITE_BASELINE(檔→未掛數)每掛一顆就把該檔數字調小,清到 0 就刪那一列;FE src/__tests__/v-can-guards.spec.js 守衛②散寫基線同理。改完跑:BE pytest test/security/code/test_permission_matrix_three_way.py、FE npx vitest run,兩邊都綠才算;重跑 python scripts/deliverables/gen_permission_matrix.py 讓矩陣跟上,矩陣 JSON 一起 commit。~/Projects/Billows/Audit-Manager/compliance-manager-test/.env.e2e,實打前先確認能登入,失敗一次就停(錯三次鎖 15 分鐘)。要造「沒權限」的反例時自己建臨時角色+帳號,驗完刪。