本卡屬 FR-114 資安修正(母卡 CM-2019),第 1 批「權限地基」卡 1-6,修 SUMMARY #43 權限資料半/#112(出自 M19-1/M19-2)。中。修法規格來自內化卡,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b1.md「卡 1-6」段。🔴 本卡依賴卡 1-9(Group B)的權限資料 migration 先套到 DEV——七支讀取端點補上權限檢查後,若缺這個能力點的角色沒有先被授權,會讓對應的下拉選單畫面「靜默變空」而非報錯,1-9 的 migration 先補齊角色的能力點才不會出這個狀況。

問題是什麼(白話)

#43(權限資料半):資產模組的七支讀取端點(設備、資訊系統)目前沒有做能力點檢查,任何登入帳號都能讀取。

#112:只給了修改權限、刻意不給刪除權限的操作人員,直接送一個「停用」欄位就能讓資訊系統從所有選單與清單裡消失,等於變相繞過了「不給刪除權限」的設計;另外更新資訊系統時如果沒帶 is_active 欄位,會被預設值重置成 True,造成「靜默重新啟用」的副作用。

首腦核對:

工作區

套件側:在 /Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-asset(branch fix/security-b1)改,只動自己那支套件的子目錄、只 git add 該子目錄下的檔。

跨 repo:BE 工作區 pyproject.toml 把 jedi-asset 的 pin 改成 path 形式指向上面那個套件 worktree,poetry update jedi-asset。這個 path 改動不 commit(git add 時跳過 pyproject.toml)。

在哪裡

device_route.py:37-38                補 capability_required("device.read")
device_route.py:56-57                同上
device_route.py:68-69                同上
device_route.py:106-107              同上
information_system_route.py:42-43    補 capability_required("information-system.read")
information_system_route.py:59-60    同上
information_system_route.py:102-103  同上
contract.py:31   device.read 能力名稱定義處(凍結,直接引用不改名)
contract.py:35   information-system.read 能力名稱定義處(凍結,直接引用不改名)
contract.py:66-78  AssetPluginConfig,新增 2 個設定欄位+DEFAULT_* 常數
information_system_entity.py:27  is_active 預設值 True,造成靜默重新啟用的根因

怎麼修

手測