FR-132 A.1 — 權限粒度盤點:該拆出獨立動詞的候選

權限粒度盤點:該拆出獨立動詞的候選

  • 卡:T-1.7(CM-2547),唯讀分析,不改程式、不改能力點樹
  • 用途:決策者裁「哪些這版拆、哪些下版、哪些不拆」
  • 行號:「A:行號」指 inventory/a1-capability-tree.md 附錄 A 的行;其餘寫檔案路徑與行號
§1

給決策者的三句話

  1. 557 支逐支過完,真正該拆的不多:候選 10 列、14 支 route;只有兩項值得這版做——「改帳號」和「給人角色」要分開(iam.user.assign,T-3.8 正在做指派 API),「按下 AI 分類」要從「上傳整理證據」分出來(要花 AI 額度)。
  2. 多數看起來粗的地方,其實第二道「專案角色」已經分開了(開輪次、結案、退回階段只有專案 manager 能做;完成、退回任務只有被指派人能做),再拆能力點只是租戶層多一道,價值低。
  3. 有三項各模組盤點已裁過,但照本卡判準仍符合,列在「翻案候選」等你決定要不要翻;其中最值得看的是資源庫的範本與 SSP 匯出掛在「看」底下,唯讀角色也能帶走,和 SSP 匯出另開一顆的原則相反。

另外:卡上提到的「專案 CSV 匯入走 grc.project.create」查不到這支端點。建專案只有一支 POST /oscal-project/start(A:630),前端專案頁的匯入只有 SSP 匯入與任務匯入兩種(compliance-manager-fe/src/views/project/ProjectPlanningView.vue:197-242)。最接近的是「用 Excel/Word 檔新建資源庫」掛 oscal.resource-library.create(A:895、A:899),列在翻案候選第 2 列。

§2

方法

讀了哪些段:附錄 A 全部 12 段(A:620-1244),每段 50-90 行分次讀;第二部分能力點樹(A:519-582,既有獨立動詞的基準);附錄 D 裁示(A:1404-1459);design.md §6.1 粒度規則(design.md:142-163);四份模組盤點的「定案結論」段(a1-grc.md、a1-oscal-flow.md:290-305、a1-detection-evidence-survey.md、a1-system-iam.md、a1-platform.md:183-197);出貨五角色 resources/roles/shipped-roles.json。

怎麼判:每支 route 問卡上的三個判準(不同職務會分開給/一次性不可逆/批次或跨界)。符合的再查兩件事:

  • service 層有沒有第二道(專案角色 manager/auditor、被指派人),有的話優先度降一級——因為「這個人在這個專案能不能做」已經分開了,拆能力點只多管「整個租戶能不能做」。
  • 各模組盤點有沒有裁過。裁過的不放候選清單,放「翻案候選」,讓你看得到但不會跟既有裁示打架。

用到的事實(逐一開檔核過):

事實 出處
改帳號的 request 帶 user_roles(就是指派) jedi_iam/api/serializers/user.py:26;a1-system-iam.md:138-140、261
改任務設定 service 要求專案 manager app/flow_control/service/job_service.py:337
任務新增/修改的 request 帶 assignees api/flow_control/serializers/job.py:283、319
開輪次要 manager、發起覆核要 auditor、結案要 manager jedi_compliance_audit/app/service/audit_round_app_service.py:240、613、567
階段推進看該階段主角色,manager 可越級;階段回退只限 manager app/flow_engine/service/stage_advance_service.py:130;stage_rollback_service.py:96
完成、退回任務只限被指派人與 manager app/flow_engine/service/workflow_execution_service.py:656、827
批次完成是 N 次單筆完成,逐筆濾指派人 app/flow_control/service/job_batch_complete_service.py:49-65
開始 AI 分類起背景工作 jedi_evidence_classification/api/routes/evidence_batch_route.py:158
重建整個租戶 Drive 資料夾(destructive) api/cloud_integration/routes/google_drive_sync_route.py:209
資源庫匯出 SSP docx/pdf/odt api/module_frame/routes/mf_ssp_export_route.py:48
§3

候選清單

「出貨角色影響」=拆出去後,五個出貨角色中誰今天因持有那項 CRUD 而能做、拆後會失去(萬用字元 *.*.*、模組.*.* 自動涵蓋新動詞,不會失去)。

高(建議這版拆)

模組.資源 現在掛 route(附錄 A 行號) 建議動詞 判準 出貨角色影響 理由
iam.user iam.user.create/update POST /user(A:1106)、PUT /user/<uid>(A:1108),request 的 user_roles 欄 iam.user.assign(既有動詞) 一、二 無(iam 只有系統管理員有,*.*.* 涵蓋) 改姓名電話(人資、窗口)和給人角色(資安主管,給管理員角色=提權)是不同職務;T-3.8 正在做指派 CRUD,新 API 直接掛新動詞成本最低。舊 PUT 夾帶 user_roles 時改要求 assign,或直接不再收這欄
evidence.classification evidence.classification.update POST /evidence-batches/<b>/classify(A:1015) execute(新造,待裁) 三(觸發 AI、花額度) 無(只有稽核主管 evidence.*.* 有 update) 同一顆 update 也管上傳檔、移除檔、完成上傳(A:1012-1014)。實務上助理整理上傳、主管才按「開始分類」花錢;今天做不到

中(建議下版拆)

模組.資源 現在掛 route 建議動詞 判準 出貨角色影響 理由
grc.audit grc.audit.update POST .../stage/advance(A:720)、POST .../stage/rollback(A:721) grc.audit.approve(沿用;或新造 advance 待裁) 一、二 稽核員會失去(列舉了 grc.audit.update),拆時要在範本補上,否則稽核員推不了自己負責的階段 推進含「審核階段通過/退回」(a1-grc.md:177 說明),是狀態轉換;同一顆 update 也管改觀察事項、風險。第二道:推進看階段主角色、回退限 manager,所以降為中
evidence.classification evidence.classification.update POST /evidence-batches/<b>/archive(A:1016) evidence.classification.approve(沿用) 三(跨界:寫進任務佐證) 無 把 AI 分類結果每檔每檢查點寫成一筆任務佐證,等於「採信分類」;和上傳整理不是同一個決定
evidence.cloud-integration evidence.cloud-integration.update POST /integrations/google-drive/tenant/rebuild-all(A:1005) execute(新造,同上列) 二、三(全租戶、外部服務、破壞性) 無(稽核主管 evidence.*.*) 同一顆 update 也管單筆同步重試(A:1001);「重試一筆」和「重建全公司資料夾」風險差很多
grc.job(繞過既有動詞) grc.job.create/update POST .../assessment-object/<ao>/jobs(A:692)、PUT .../job/<job>(A:690),request 的 assignees 欄 夾帶 assignees 時改要求 grc.job.assign 一 一般成員持有 grc.job.update 但沒有 assign;service 另要求 manager,實際影響只在他是某專案 manager 時 grc.job.assign 已存在(A:702-705 指派端點),但改任務時一併送指派人就繞過它。不是新拆,是補齊既有拆分

低(記錄即可)

模組.資源 現在掛 route 建議動詞 判準 出貨角色影響 理由
grc.audit grc.audit.create POST /projects/<pid>/audit-rounds(A:645)、POST /audit-round/<rid>/launch-reverify(A:649) grc.audit.close(輪次生命週期併一顆)或不拆 一 稽核員會失去(有 grc.audit.create) 開輪次和新增觀察事項同一顆。但開輪次限 manager、發起覆核限 auditor,第二道已分開;a1-grc.md 定案 3 也裁了 audit 不再細拆
iam.user iam.user.update POST /user/change-status/<uid>(A:1110) 不拆或 iam.user.close 一、二 無 停用帳號是離職流程,但多半和改資料同一個人做
evidence.classification evidence.classification.update POST /classification-ground-truth(A:1023) evidence.classification.import(沿用) 三(匯入) 無 匯入正解基準,給評估分類準確度用,極少用
grc.project(繞過既有動詞) grc.project.create POST /oscal-project/start(A:630),request 的 participants 欄 不拆 一 無 建專案時順手加成員繞過 grc.project.assign;但建專案表單本來就要選成員(同一表單不同欄位),建議維持
§4

翻案候選(已裁過,照本卡判準仍符合)

模組.資源 現在掛 route 已裁 照判準看 建議
oscal.resource-library oscal.resource-library.read 控制預設值匯出 Excel(A:835)、範本 SSP 匯出 docx/pdf/odt(A:843) a1-oscal-flow.md 定案 4:資源庫匯出歸 read 判準三(匯出)。第三部分寫「oscal.*.read 拿不到 oscal.ssp.export,只看不帶走是刻意的」(A:605),資源庫匯出卻讓唯讀、稽核員、一般成員都能帶走 中:開 oscal.resource-library.export。範本是公版內容不是客戶資料,所以不到高;但客戶自己改過的範本(含預設實作說明)就是客戶的內容
oscal.resource-library create/update 匯入資源庫 JSON/YAML(A:794-796)、控制預設值匯入四步(A:837-840)、SSP Excel/Word 匯入目標是資源庫時(A:895-902) a1-oscal-flow.md 定案 2:資源庫不開 import 判準三(匯入) 低:維持。會用資源庫的只有稽核主管與系統管理員,兩者都有整包,拆了沒有人受惠
detection.remote-agent detection.remote-agent.update 核准新報到 agent(A:934)、重新綁定設備指紋(A:935) a1-detection-evidence-survey.md 定案 4:核准歸 update,不開 approve 判準一、二(信任一台機器、核准即簽憑證) 低:維持。管 agent 的就是 IT 一人,改名和核准不會分給不同人
§5

不拆但容易誤判的

route 看起來像 為什麼不拆
開始掃描、取消、重跑等執行控制 8 支(A:953-961) 判準三:觸發 agent 掃描 通則 A+a1-detection-evidence-survey.md 定案 1:在任務頁做、做的就是任務指派人。掃描範圍另由 FR-129 授權網段管,不靠能力點
啟動任務執行(A:643)、強制開始卡住的任務(A:695) 判準一、三:寄通知、越過合流閘道 已在 grc.job.assign(a1-grc.md 定案 7):本質是派工,能指派就要能派發。兩支 service 都另限 manager
完成任務、退回任務(A:710-711) 審核關卡的「通過/退回」也走這支,像 approve 審核關卡是一個獨立任務,有自己的被指派人;誰能審由「指派給誰」決定,service 限被指派人與 manager(workflow_execution_service.py:656、827)
Excel 匯入問卷答案(A:737) 判準三:批次匯入 第一部分已裁(A:93):線上填和 Excel 匯入是同一個受稽方做同一件事
AI 儀表板自動生成(A:1211)、AI 小幫手聊天(A:1212) 判準三:花 AI 錢卻掛 read 這兩個資源本身就是 AI 功能,ai.assistant.read/ai.dashboard.read 就是「能不能用 AI」的開關(a1-platform.md 定案 6);資源沒有其他動作可分
測試寄信、測 LDAP、測通知、測 log 轉發、測工具連線(A:1082-1089、A:950) 判準三:觸發外部服務 對象是管理員自己剛填的設定,是設定表單的一步;只有設定管理員會按
產生 agent 註冊碼(A:937) 判準三:發放註冊碼 註冊碼是新增 agent 的唯一入口,「能產生註冊碼」就等於「能新增 agent」,掛 create 正確;停用註冊碼掛 delete 也對
批次刪專案(A:635)、批次完成任務(A:696) 判準三:批次 批次刪就是 N 次刪除(delete 本來就獨立);批次完成在 service 逐筆濾指派人,權限不比單筆大
下載框架 OSCAL(A:767)、下載空白範本(A:836、A:841-842) 判準三:匯出 框架是公開標準;空白範本不含任何資料
摘要報告還原歷史版本(A:731) 判準二:覆蓋 還原後仍可再還原,不是不可逆;做的人就是編輯報告的人
§6

統計

項目 數量
讀過的 route 559(附錄 A 合計,A:1245)
候選 10 列、14 支 route
涉及資源 6 個:iam.user、evidence.classification、evidence.cloud-integration、grc.audit、grc.job、grc.project
高 2 列(3 支)
中 4 列(6 支)
低 4 列(5 支)
翻案候選 3 列(約 17 支,含通則 C 依目標判的 8 支)
不拆但易誤判 10 組

其餘約 540 支照現行掛法即可:多數是同一資源的不同欄位(SSP、資源庫、問卷子物件)、挑選下拉(通則 B)、或已經拆好的獨立動詞。

§7

新造動詞清單(等裁)

動詞 用在 問題 替代方案
execute evidence.classification.execute(開始 AI 分類)、evidence.cloud-integration.execute(重建全租戶資料夾) design §6.1 限定獨立動詞只有四類(狀態轉換、對外送出、指派、匯入,design.md:150),execute(觸發外部服務或花錢)是第五類,要改規則 不新造:AI 分類改用 evidence.classification.create(把「開始一次分類」當成新增一筆分類執行),上傳整理留 update。缺點是 create 今天是「建批次」,兩件事又擠在一起
advance(備選) grc.audit.advance(階段推進、回退) 只有在不想沿用 grc.audit.approve 時才需要;沿用的話,審閱打勾和推進階段會綁在一起 建議沿用 approve:兩者都是「主管確認這一段可以往下走」,a1-grc.md 定案 5 也是為了守四類而沿用 approve

沿用既有動詞的(不必另裁):iam.user.assign、evidence.classification.approve、evidence.classification.import、oscal.resource-library.export(若翻案)。