唯讀盤點。把專案內每一個「看角色決定能不能做」的地方——後端守門、讀模型 SQL、通知收件人、流程站、前端按鈕——各對到一個
proj.*能力點,作為 T-2.1 seed 與 T-3.x/T-4.x 改碼的對照表。 路徑縮寫:$S=.venv/lib/python3.11/site-packages;FE=compliance-manager-fe/src。 角色縮寫:M=manager(負責人)、R=reviewer(審核者)、A=auditor(稽核員)、V=viewer(瀏覽者);「全員」=四值任一的參與者。 查法:fb=走get_user_role由 control → group → project 往上找第一筆指派;exact=只看專案層project_participants.role一列。
proj.project.read。每個專案角色都必含它(D1),所以這類守門改完後行為等於「是不是參與者」,非參與者照舊 404。assert_job_operator、問卷 writer、偵測操作)保留「是不是被指派人」那條路,只把「負責人可代為操作」那半換成 proj.job.manage。任務被指派人在 DEV 有 148 筆是瀏覽者,指派人那條路若改成要能力點,這些人會全部失去自己任務的操作權。main_role)改存能力點名後,可推進=持有該站任一 main_caps,或持有 proj.stage.advance-any;force 只認 proj.stage.advance-any(D8)。common/authz/project.py 的四支守門是所有守門的實作出口:套件端(jedi_task_platform/jedi_compliance_audit/jedi_survey/jedi_evidence_classification/jedi_detection)經 core/plugins/*.py adapter 轉進來,所以套件只改呼叫參數(D9),判定在主專案一處改。| file:line | 白話動作 | 現行允許角色 | 查法 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|---|
common/authz/project.py:28 assert_project_manager |
「必須是負責人」守門 | M | fb | 改收能力點名參數;呼叫端各自指定(見 A.2~A.6) | T-3.1 CM-2982 |
common/authz/project.py:47 assert_project_role_fallback |
多角色版守門 | 呼叫端給 | fb | 改收能力點名參數 | T-3.1 CM-2982 |
common/authz/project.py:75 assert_project_role |
只看專案層的多角色守門 | 呼叫端給,預設 M | exact | 改收能力點名參數 | T-3.1 CM-2982 |
common/authz/project.py:118 assert_project_participant |
是不是參與者 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
common/authz/workflow.py:71 |
以流程實例反查專案後判參與者 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
common/authz/ssp.py:96 require_participant、:212 require_read_access |
SSP 讀 | 全員 | exact | proj.project.read |
T-3.1 CM-2982 |
common/authz/ssp.py:110 require_manager、:232 require_write_access(判定在 :176 _require_user_is_manager) |
SSP 寫 | M | exact | proj.ssp.update |
T-3.1 CM-2982 |
common/authz/__init__.py:28-35 |
守門決策表軸③ | — | — | 改寫成能力點版 | T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/participant_role_service.py:34 get_user_role |
fb 查角色的唯一實作 | — | fb | 新增 get_user_project_capabilities;get_user_role 保留做相容 |
T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/participant_role_service.py:86 get_reviewers_for_task |
找某任務的審核者 | R | — | 無呼叫端,見待裁 13 | T-3.1 CM-2982 |
core/plugins/compliance_audit.py:85(exact)、:92(fb),預設 ("manager",) |
稽核套件守門 adapter | 呼叫端給 | exact/fb | 轉發能力點名 | T-3.1 CM-2982 |
core/plugins/participant.py:100 assert_manager、:107 assert_participant |
參與者套件守門 adapter | M/全員 | fb | proj.participant.manage/proj.project.read |
T-3.1 CM-2982 |
core/plugins/evidence_classification.py:88 is_project_manager |
證據分類套件「是負責人」 | M | exact | proj.evidence.manage |
T-3.1 CM-2982 |
core/plugins/evidence_classification.py:113 |
證據分類套件「是參與者」 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
infra/survey/adapters.py:54、:65 |
問卷套件守門 adapter | M/全員 | fb | proj.job.manage/proj.project.read |
T-3.1 CM-2982 |
$S/jedi_task_platform/task/api/guards.py:129,142、task/common/guard.py:54,66、participant/common/guard.py:50,71 |
套件內守門轉發點(只轉交主專案 adapter) | 呼叫端給 | — | 參數改能力點名,判定不在此 | T-3.1 CM-2982 |
| file:line | 白話動作 | 現行允許角色 | 查法 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|---|
app/flow_control/service/project_service.py:388 update_project |
改專案設定 | M | fb | proj.project.update |
T-3.1 CM-2982 |
app/flow_control/service/project_service.py:590 delete_project |
刪專案 | 擁有者 或 M | exact | proj.project.update(擁有者放行保留;拆不拆見待裁 4) |
T-3.1 CM-2982 |
app/flow_control/service/project_service.py:630 batch_delete_projects |
批次刪專案 | 擁有者 或 M | exact | 同上 | T-3.1 CM-2982 |
app/flow_control/service/project_service.py:464 |
改專案時同步參與者,沒給角色預設瀏覽者 | 預設 V | — | 預設改「租戶最小專案角色」(只含 proj.project.read) |
T-3.1 CM-2982 |
app/flow_control/service/project_read_guard.py:22 |
專案讀取 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/participant_org_unit_app_service.py:29 |
參與者組織單位讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/project/service/project_start_app_service.py:133-148 _add_participants(:146 建立者) |
建專案寫參與者;建立者自動成負責人 | 建立者 M、其他預設 V | — | 建立者寫 is_default_owner 角色;其他預設最小角色 |
T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/project_participant_service.py:96,120,140 |
增/改/刪專案參與者 | M | fb | proj.participant.manage |
T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/project_participant_service.py:49,164 |
參與者列表、下拉 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/project_control_participant_service.py:44,66 |
控制項參與者讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/task_assignee_service.py:102,188,224 |
增/改/刪任務指派人 | M | fb | proj.participant.manage |
T-3.1 CM-2982 |
$S/jedi_task_platform/participant/app/service/task_assignee_service.py:88,93 |
指派人讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/review_step_assign_service.py:95 _resolve_editable、:110 _apply_skip_reason |
指派審閱步驟、填略過原因 | M | fb | proj.participant.manage(見待裁 7) |
T-3.1 CM-2982 |
app/flow_control/service/review_step_service.py:148 |
審閱步驟讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/job_service.py:159 _require_manager → create_job:221、update_job:352、delete_job:273 |
增/改/刪任務 | M | fb | proj.job.manage |
T-3.1 CM-2982 |
app/flow_control/service/job_service.py:194 get_job、:312 list_jobs |
任務讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/job_import_service.py:96 _check_manager_role |
匯入任務 | M | exact | proj.job.manage |
T-3.1 CM-2982 |
app/flow_control/service/job_import_service.py:111 _assert_plan_in_project |
匯入前確認計畫屬於本專案 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/job_batch_complete_service.py:64 |
批次完成任務(基本門檻) | 全員且是指派人 | fb | proj.project.read+指派人 |
T-3.1 CM-2982 |
app/flow_control/service/job_batch_complete_service.py:65 |
負責人批次完成不必是指派人 | M | fb | proj.job.manage(見待裁 1) |
T-3.1 CM-2982 |
app/flow_control/service/flow_apply_to_tasks_service.py:195 _require_source |
把流程套用到任務 | M | fb | proj.job.manage |
T-3.1 CM-2982 |
app/flow_control/service/workflow_xml_sync_service.py:140,157 _assert_project_manager_if_owned |
同步專案擁有的流程 XML | M | fb | proj.job.manage |
T-3.1 CM-2982 |
$S/jedi_task_platform/task/app/service/task_execution_service.py:57 _check_manager → start_task_execution:72 |
啟動任務執行 | M | exact | proj.job.manage |
T-3.1 CM-2982 |
$S/jedi_task_platform/task/app/service/task_execution_service.py:147 get_prep_job_progress |
準備任務進度讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_task_platform/task/app/service/job_comment_service.py:35 |
任務留言 | 全員(以流程實例判) | fb | proj.project.read |
T-3.1 CM-2982 |
app/task_alert/service/task_alert_notification_app_service.py:42 list_notifications |
專案任務提醒列表 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/task_alert/service/manual_job_due_reminder_service.py:90 _guard |
手動寄到期提醒 | M | fb | proj.job.manage(見待裁 8) |
T-3.1 CM-2982 |
app/flow_control/service/drive_sync_admin_service.py:150 _require_project_manager |
觸發雲端硬碟同步 | 擁有者 或 M | exact | proj.project.update |
T-3.1 CM-2982 |
app/flow_control/service/drive_project_verify_service.py:160 _collect_for_verify |
雲端硬碟同步核對 | 擁有者 或 M | exact | proj.project.update |
T-3.1 CM-2982 |
| file:line | 白話動作 | 現行允許角色 | 查法 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|---|
app/flow_engine/service/workflow_execution_service.py:137 assert_project_participant |
流程實例讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_engine/service/workflow_execution_service.py:148 assert_job_operator(實作 job_operator_guard) |
任務操作:完成 complete_job:636、撤回 revert_job:812 |
指派人 ∪ M | fb | 指派人 ∪ proj.job.manage(見待裁 11) |
T-3.1 CM-2982 |
app/flow_engine/service/job_evidence_service.py:62,83 |
任務佐證讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_engine/service/job_evidence_service.py:98,165,191 |
任務佐證新增/修改/刪除 | 全員 | fb | 指派人 ∪ proj.job.manage(見待裁 6) |
T-3.1 CM-2982 |
app/flow_engine/service/job_force_start_service.py:62 inspect |
強制開始前檢查 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_engine/service/job_force_start_service.py:69,131 force_start |
強制開始任務 | M | fb | proj.job.manage |
T-3.1 CM-2982 |
app/flow_engine/service/stage_advance_service.py:113 get_current_stage_info |
目前階段資訊讀 | 全員 | exact | proj.project.read |
T-3.3 CM-2984 |
app/flow_engine/service/stage_advance_service.py:152 user_can_advance |
回傳「你能不能推進」給畫面 | 站上 main_roles 或 M |
exact | caps & main_caps 或 proj.stage.advance-any |
T-3.3 CM-2984 |
app/flow_engine/service/stage_advance_service.py:348 advance_stage |
推進階段 | 站上 main_roles 或 M |
exact | caps & main_caps 或 proj.stage.advance-any |
T-3.3 CM-2984 |
app/flow_engine/service/stage_advance_service.py:359 |
強制推進(force) |
M | exact | proj.stage.advance-any |
T-3.3 CM-2984 |
app/flow_engine/service/stage_advance_service.py:672-679 _resolve_main_roles |
讀站上 main_role(逗號多值) |
— | — | _resolve_main_caps:舊四值換算、其餘當能力點名 |
T-3.3 CM-2984 |
app/flow_engine/service/stage_rollback_service.py:99 rollback_stage |
退回上一階段 | M | exact | proj.stage.advance-any |
T-3.3 CM-2984 |
| file:line | 白話動作 | 現行允許角色 | 查法 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|---|
app/flow_control/service/assessment_plan_app_service.py:219,223 _check_auditor(經 resolve_ap_and_check_auditor:174,196) |
AP 寫:審查控制項 :539、評估對象 :551、AP 成員 :608、補稽核員 :642 |
A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
app/flow_control/service/ap_objectives_app_service.py:89,118 |
AP 評估目標寫、加受訪人 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
app/flow_control/service/ap_overview_app_service.py:67 |
AP 概要寫 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
app/flow_control/service/ap_workbook_import_service.py:35,60,71 |
AP 工作底稿上傳/確認 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
app/flow_control/service/assessment_plan_app_service.py:514 get_ap_for_round |
AP 讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/ar_objective_app_service.py:101 require_writable → ar_close_service:32、ar_workbook_import_service:34,69 |
AR 結案、AR 工作底稿上傳/確認 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
app/flow_control/service/ar_objective_app_service.py:117,158,168,218,234 |
AR 評估目標、控制 SSP、證據池、結論、結論草稿讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/ar_objective_app_service.py:365,367 assert_project_participant_by_id |
以四值清單判參與者 | 全員 | exact | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/ar_task_context_service.py:33 |
AR 評估目標關聯任務讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/flow_control/service/pass_report_export_service.py:85,93 |
單次稽核報告匯出 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../audit_round_app_service.py:138 _check_role(M)→ create_round:255、launch_audit:427、close_round:531、rollback_to_planning:768、rollback_to_audit_planning:802、rollback_to_auditing:825、audit_round_pass_rollback.py:29 |
建輪次、啟動稽核、結束輪次、各段退回 | M | exact | proj.round.manage(新增,見待裁 5) |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../audit_round_app_service.py:138(A、M)→ start_auditing:462、finalize_audit:482、launch_reverify:560 |
開始稽核、完成稽核、發起複查 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../audit_round_app_service.py:235,245,863 |
輪次列表、輪次詳情、階段轉換紀錄讀 | 全員 | exact | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../audit_service.py:28 _check_role → update_verdict:94、create_finding:106、update_finding:128、delete_finding:143 |
稽核判定、發現事項增改刪 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../assessment_result_app_service.py:114 _check_auditor → resolve_round_for_import:156、judge_finding:511、create_observation:546、update_observation:574、delete_observation:605、add_risk:677、update_risk:739、delete_risk:753、link_risk_findings:768 |
AR 匯入、發現判定、觀察事項、風險增改刪與連結 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../assessment_result_app_service.py:377,690 |
發現事項、風險列表讀 | 全員 | exact | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../review_service.py:35 _require_manager → mark_control:89、unmark_control:103、mark_ao:117、unmark_ao:132 |
控制項/評估目標標記已審閱與取消 | M、R | fb | proj.review.approve |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../guard.py:49 ANY_PARTICIPANT |
套件內「任一參與者」常數 | 全員 | — | proj.project.read |
T-3.1 CM-2982 |
core/plugins/_file_ownership.py:176 |
輪次附件寫 | A、M | exact | proj.audit.judge |
T-3.1 CM-2982 |
| file:line | 白話動作 | 現行允許角色 | 查法 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|---|
app/flow_control/service/poam_objective_app_service.py:90 _require_writable |
POA&M 評估目標寫 | M | exact | proj.poam.manage |
T-3.1 CM-2982 |
app/flow_control/service/poam_objective_app_service.py:102,237,247 |
POA&M 評估目標讀、OSCAL 匯出、計畫讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../poam_app_service.py:97 _check_manager → add_remediation:326、add_milestone:353、update_milestone:368、delete_milestone:389、delete_remediation:402 |
改善措施、里程碑增改刪 | M | exact | proj.poam.manage |
T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../poam_app_service.py:252,284 |
POA&M 項目列表、詳情讀 | 全員 | exact | proj.project.read |
T-3.1 CM-2982 |
app/closing_report/service/closing_report_app_service.py:36 READ_ROLES、:68,73 require_report |
結案報告讀、匯出 | M、A | exact | proj.report.read(見待裁 3) |
T-3.1 CM-2982 |
app/closing_report/service/closing_report_writer.py:28 WRITE_ROLES、:91 |
結案報告建立、發布 | M | exact | proj.report.manage |
T-3.1 CM-2982 |
app/project_summary_report/service/project_summary_report_service.py:47 |
專案摘要報告產生與讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/project_summary_report/service/project_summary_report_history_service.py:34,49,60 |
摘要報告歷史讀 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
app/project_summary_report/service/project_summary_report_history_service.py:79 |
摘要報告還原到某版 | 全員 | fb | proj.project.read(見待裁 9) |
T-3.1 CM-2982 |
$S/jedi_evidence_classification/.../evidence_batch_service.py:1479 _require_manager → create_batch_for_round:402、upload_files:507、delete_file:537、seal:552、archive:562、purge:662、delete_batch:720、put_run_state:834、classify:985 |
證據分類批次建立、上傳、刪檔、封存、歸檔、清除、刪批次、執行狀態、分類 | M | exact | proj.evidence.manage |
T-3.1 CM-2982 |
$S/jedi_evidence_classification/.../evidence_batch_service.py:1486 _require_participant → list_batches:426、get_batch_detail:455、get_run_state:822、preview:881、validation_report:912、adjudication_report:923 |
證據分類批次讀、預覽、驗證與裁決報告 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_evidence_classification/.../evidence_classification_service.py:51 is_any_project_manager |
不綁專案的標準答案匯入:在任一專案當負責人即可 | 任一專案 M | exact | 見待裁 10 | T-3.1 CM-2982 |
$S/jedi_detection/.../detection_orchestration_service.py assert_job_operator → start_execution:185、cancel_execution:897、rerun_assignment:940、cancel_assignment:1055、cancel_group:1082、delete_execution:1139、delete_group:1181、start_assignment_now:1523 |
偵測任務啟動、取消、重跑、刪除 | 指派人 ∪ M | fb | 指派人 ∪ proj.job.manage(見待裁 11) |
T-3.1 CM-2982 |
$S/jedi_detection/.../detection_orchestration_service.py:1715 list_executions |
偵測執行列表 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
$S/jedi_survey/.../task_survey_guard.py:57-78 writer → question_answer 更新 :114、checkpoint:228、patch:388、history:82 |
填答、存檔點 | 指派人 ∪ M | fb | 指派人 ∪ proj.job.manage(見待裁 11) |
T-3.1 CM-2982 |
$S/jedi_survey/.../task_survey_guard.py:147 manager → task_survey_service:126,310,627 |
問卷設定、批次匯入答案 | M | fb | proj.job.manage |
T-3.1 CM-2982 |
$S/jedi_survey/.../task_survey_guard.py:136 reader → socketio:63、survey_discussion:47、history:58,71、history_detail:35、task_survey:82,96,109 |
問卷讀、討論、歷史 | 全員 | fb | proj.project.read |
T-3.1 CM-2982 |
SSP 寫入全部經 common/authz/ssp.py 的 require_manager/require_write_access(→ proj.ssp.update),讀取經 require_participant/require_read_access(→ proj.project.read);改 ssp.py 一處即全部生效,下表列呼叫端供核對。
| file:line | 白話動作 | 現行允許角色 | 查法 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|---|
app/oscal/service/ssp_risk_scope_*.py:69;讀 :55 |
風險範圍寫/讀 | M/全員 | exact | proj.ssp.update/proj.project.read |
T-3.1 CM-2982 |
app/oscal/service/*inventory_items*.py:75,102,128;讀 :66 |
資產清冊增改刪/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*excel_import*.py:641;讀 :651 |
SSP Excel 匯入/預覽 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*document_pool*.py:65,119,157,164,195,202;讀 :59,149,187 |
程序書池、控制項對應、AO 對應增刪/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*system_characteristic*.py:54;讀 :46 |
系統特性寫/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*resources*.py:38,45,51;讀 :33 |
參考資源增改刪/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*leveraged*.py:75,102,132;讀 :67 |
外部授權增改刪/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*party*.py:78,99,117;讀 :69 |
SSP 人員增改刪/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*components*.py:71,103,133;讀 :60 |
元件增改刪/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*control_org_unit*.py:94 _batch_set;讀 :37(含資源庫讀者) |
控制項負責單位寫/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/*control_impl_import*.py:399;讀 :116,239,359 |
控制項實作匯入確認/匯出、驗證 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/ssp_docx_import_app_service.py:575;讀 :585 |
SSP docx 匯入/預覽 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/ssp_control_implementation_service.py:107,692,710;讀 :95,127,188 |
控制項實作與評估目標寫、移除程序書/讀、樹 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
app/oscal/service/governance/raci_subject_resolvers.py:92;讀 :96 |
RACI 主體寫/讀 | M/全員 | exact | 同上 | T-3.1 CM-2982 |
api/oscal/__init__.py:102 create_module |
建 SSP 模組 | M | exact | proj.ssp.update |
T-3.1 CM-2982 |
app/oscal/service/*ao_evidence_source*.py:88、*cra_legal_docs_export*.py:109、ssp_export*.py:85、app/module_frame/service/*ssp_import_template*.py:279、*form_settings*.py:25 |
AO 證據來源、CRA 法規文件匯出、SSP 匯出、匯入範本、表單設定讀 | 全員 | exact | proj.project.read |
T-3.1 CM-2982 |
core/plugins/_file_ownership.py:112;:115 |
SSP 附件刪/讀 | M/全員 | exact | proj.ssp.update/proj.project.read |
T-3.1 CM-2982 |
core/plugins/_file_ownership.py:277;:279 |
流程任務附件寫/讀 | 指派人 ∪ M/全員 | fb | 指派人 ∪ proj.job.manage/proj.project.read |
T-3.1 CM-2982 |
core/plugins/_file_ownership.py:310(判準說明 :287-288) |
證據分類批次檔刪/讀 | M/全員 | exact/fb | proj.evidence.manage/proj.project.read |
T-3.1 CM-2982 |
core/plugins/file_upload.py:124,132 |
任務佐證檔刪/讀 | 指派人 ∪ M/全員 | fb | 指派人 ∪ proj.job.manage/proj.project.read |
T-3.1 CM-2982 |
core/plugins/file_upload.py:217,219 |
樣板 SSP 附件寫/讀 | M/全員 | exact | proj.ssp.update/proj.project.read |
T-3.1 CM-2982 |
| file:line | 白話動作 | 現行值 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|
api/project/serializers/project.py:26-30 |
建/改專案收參與者角色,預設瀏覽者 | OneOf 四值 | 改收專案角色 uid | T-3.1 CM-2982 |
$S/jedi_task_platform/.../serializers/project_participant*.py:17,23 |
參與者 API 收角色 | OneOf 四值 | 改收專案角色 uid | T-3.1 CM-2982 |
$S/jedi_task_platform/.../serializers/process_participant*.py:15,20 |
流程參與者 API 收角色 | OneOf 四值 | 改收專案角色 uid | T-3.1 CM-2982 |
$S/jedi_compliance_audit/.../serializers/project.py:77 |
稽核套件參與者角色 | OneOf 四值 | 改收專案角色 uid | T-3.1 CM-2982 |
app/oscal/service/excel_parser/validators.py:9,39 VALID_PARTICIPANT_ROLES |
SSP Excel 匯入驗參與者角色欄 | 四值 | 改驗「租戶內專案角色名」 | T-3.1 CM-2982 |
common/enum/participant_enum.py、$S/jedi_task_platform/.../participant_enum.py:13-14 |
四值 enum(已單一來源) | 四值 | 保留做舊值換算表 | T-3.1 CM-2982 |
app/readmodel/service/audit_plan_list_service.py:30-33 |
稽核計畫列表 can_edit(規劃中且 A/M)、needs_assign(沒 AP 或沒稽核員且 M) |
A、M/M | can_edit→proj.audit.judge;needs_assign→見待裁 12 |
T-3.1 CM-2982 |
app/flow_control/service/project_service.py:678-681 _notify_project_started |
專案開始通知信裡的角色標籤 | 四值對中文 | 改顯示專案角色名稱 | T-3.1 CM-2982 |
全部直接比對 project_participants.role(exact);改為 project_role_id = ANY(:role_ids),role_ids 由「本租戶含能力點 X 的專案角色」helper 算出。
| file:line | 白話用途 | 現行條件 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|
infra/readmodel/tasks/job_due_reminder_query.py:55 |
到期提醒收件人(指派人+負責人) | M | 指派人 ∪ proj.job.manage |
T-3.2 CM-2983 |
infra/readmodel/tasks/job_batch_complete_query.py:239 |
批次完成「請審閱」信收件人 | M、R | proj.review.approve |
T-3.2 CM-2983 |
infra/readmodel/detection/detection_job_notify_query.py:156 |
偵測完成/失敗通知收件人(另加指派人) | M、R | 指派人 ∪ proj.review.approve ∪ proj.job.manage(見待裁 14) |
T-3.2 CM-2983 |
infra/readmodel/detection/support_end_query.py:52 |
系統版本支援終止提醒收件人 | M | proj.project.update |
T-3.2 CM-2983 |
infra/readmodel/audit/auditor_dashboard_query.py:60 |
「我的稽核」列表範圍 | A、M | proj.audit.judge |
T-3.2 CM-2983 |
infra/readmodel/audit/auditor_dashboard_query.py:157 |
列表上顯示的稽核員名字 | A | proj.audit.judge(見待裁 15) |
T-3.2 CM-2983 |
infra/readmodel/audit/poam_dashboard_query.py:61 |
「我的 POA&M」列表範圍 | M | proj.poam.manage |
T-3.2 CM-2983 |
infra/readmodel/audit/audit_plan_list_query.py:47 |
稽核計畫列表「我參與的」 | A、M、R | proj.audit.judge ∪ proj.review.approve |
T-3.2 CM-2983 |
infra/readmodel/audit/audit_plan_list_query.py:53 |
列表顯示負責人名字 | M | 預設負責人角色(見待裁 15) | T-3.2 CM-2983 |
infra/readmodel/audit/audit_plan_list_query.py:196 |
待處理件數 | A、M | proj.audit.judge |
T-3.2 CM-2983 |
infra/readmodel/audit/audit_plan_list_query.py:310 _managers_by_project |
每專案負責人帳號清單 | M | 預設負責人角色(見待裁 15) | T-3.2 CM-2983 |
infra/readmodel/audit/closing_report_list_query.py:27 |
結案報告列表「我參與的」 | A、M | proj.report.read |
T-3.2 CM-2983 |
infra/readmodel/audit/closing_report_list_query.py:32 |
列表顯示負責人名字 | M | 預設負責人角色(見待裁 15) | T-3.2 CM-2983 |
| file:line | 白話用途 | 現行規則 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|
app/flow_engine/service/stage_entered_recipients.py resolve_stage_recipients |
進入新階段通知收件人 | 負責人永遠收;站上 main_roles 的參與者收(稽核員再依 audit_scope 過濾);沒有任何主責人時負責人收「未指派」 |
main_caps 任一持有者(audit_scope 只套在持 proj.audit.judge 者)∪ proj.stage.advance-any;沒有主責人時 advance-any 持有者收「未指派」 |
T-3.2 CM-2983 |
app/flow_engine/service/stage_entered_notify_service.py:44-55 |
寄出進站通知 | 呼叫上一列 | 同上 | T-3.3 CM-2984 |
$S/jedi_detection/.../detection_orchestration_service.py:1594 on_scan_failed |
偵測失敗通知(與成功同一組收件人) | 指派人 ∪ M、R | 同 A.8 偵測那列 | T-3.2 CM-2983 |
compliance.stage_objects.default_main_roles planning |
規劃站 | manager | proj.stage.advance-any |
T-2.2 CM-2981 |
同上 ap_authoring |
AP 撰寫站 | auditor | proj.audit.judge |
T-2.2 CM-2981 |
同上 task_execution |
任務執行站 | manager | proj.stage.advance-any |
T-2.2 CM-2981 |
同上 review |
審閱站 | reviewer | proj.review.approve |
T-2.2 CM-2981 |
同上 audit |
稽核站 | auditor | proj.audit.judge |
T-2.2 CM-2981 |
同上 poam |
改善站 | manager | proj.stage.advance-any |
T-2.2 CM-2981 |
compliance.flow_templates.bpmn_xml 的 main_role(DEV:auditor 20、reviewer 11、manager 44) |
設計器範本各站主責 | 舊四值 | 同上換算 | T-2.2 CM-2981 |
compliance.workflow_templates.xml(DEV:auditor 14、manager 12) |
已開跑的流程快照 | 舊四值 | 不改資料,讀取時由 _resolve_main_caps 換算 |
T-3.3 CM-2984 |
| file:line | 白話動作 | 現行判斷 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|
FE/components/grc/ParticipantPicker.vue:93,103-106,161-162,173 |
參與者角色下拉四個寫死選項 | 四值 | 讀 GET /project-roles |
T-4.2 CM-2987 |
FE/components/grc/ParticipantPicker.vue:178,185 |
audit_scope 欄只對稽核員顯示 |
role === 'auditor' |
角色含 proj.audit.judge 才顯示 |
T-4.2 CM-2987 |
FE/composables/useParticipantAuditScopeOptions.js:29 |
稽核範圍選項 | role === 'auditor' |
同上 | T-4.2 CM-2987 |
FE/components/grc/project/ProjectParticipantsPanel.vue:57 |
新增參與者預設瀏覽者 | 預設 V | 預設最小專案角色 | T-4.2 CM-2987 |
FE/components/grc/project/ProjectParticipantsPanel.vue:75 |
至少要有一位負責人才能存 | 有 M | 至少一位持 proj.participant.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectCreateView.vue:177,489-490 |
建專案時建立者為負責人、角色下拉 | 'manager'、四值 |
預設負責人角色、讀 GET /project-roles |
T-4.2 CM-2987 |
| 角色頁(新) | 專案角色列表、詳情、勾能力點 | — | 表 B 全部 | T-4.1 CM-2986 |
| file:line | 白話動作 | 現行判斷 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|
FE/composables/useSurveyParticipantRole.js:12-20 resolveSurveyRole、isProjectManagerOf |
問卷頁判誰能填、誰能設定 | p.role === 'manager' |
指派人 ∪ proj.job.manage |
T-4.2 CM-2987 |
FE/views/survey-v2/SurveyPreview.vue:348-372,508,565-575 |
問卷填答/核對按鈕 | 由上一列得角色 | 同上 | T-4.2 CM-2987 |
FE/views/survey-v2/SurveyPreview.vue:1297 |
審核者看不到歷史 | 角色為 R | proj.project.read(見待裁 16) |
T-4.2 CM-2987 |
FE/composables/useApPlan.js:50 isWriter |
AP 編輯頁唯讀與否 | A、M | proj.audit.judge |
T-4.2 CM-2987 |
FE/composables/useArResult.js:69 isWriter |
AR 結果頁唯讀與否 | A、M | proj.audit.judge |
T-4.2 CM-2987 |
FE/composables/usePoamPlan.js:57-62 isManager |
POA&M 頁唯讀與否 | M | proj.poam.manage |
T-4.2 CM-2987 |
FE/components/grc/JobExecutionDrawer.vue:215,1582 |
任務抽屜強制開始、改期限(吃呼叫頁算好的 canForceStart) |
M | 指派人 ∪ proj.job.manage |
T-4.2 CM-2987 |
FE/components/grc/FlowPhaseBanner.vue:255 isManager;:37 |
階段列「退回」按鈕 | M | proj.stage.advance-any |
T-4.2 CM-2987 |
FE/components/grc/FlowPhaseBanner.vue:501 |
階段主責角色標籤 | 四值 i18n | 能力點 display_name | T-4.2 CM-2987 |
FE/components/grc/ssp/SspTabPanel.vue:97,105 |
SSP 各區塊可編輯 | M | proj.ssp.update |
T-4.2 CM-2987 |
FE/views/project/ProjectSettingsView.vue:54 |
專案設定頁可編輯 | M | proj.project.update |
T-4.2 CM-2987 |
FE/views/project/ProjectListView.vue:93-97,366 |
列表「雲端同步」 | 擁有者 或 M,加 v-can CAP.GRC_PROJECT_UPDATE |
proj.project.update(租戶 v-can 見待裁 17) |
T-4.2 CM-2987 |
FE/views/project/ProjectListView.vue:372 |
列表「編輯」 | 同上 | proj.project.update |
T-4.2 CM-2987 |
FE/views/project/ProjectListView.vue:377 |
列表「刪除」 | 擁有者 或 M,加 v-can CAP.GRC_PROJECT_DELETE |
proj.project.update(見待裁 4) |
T-4.2 CM-2987 |
FE/views/project/ProjectPlanningView.vue:450-453,461 isProjectManager |
規劃頁「是負責人」 | M | 拆成下面各按鈕的能力點 | T-4.2 CM-2987 |
FE/views/project/ProjectPlanningView.vue:796-799 canEditCtrl |
控制項層可編輯(含群組/控制項層負責人) | M(fb) | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectPlanningView.vue:812-818 canEdit |
規劃頁可編輯 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectPlanningView.vue:1968 |
「指派」按鈕 | M | proj.participant.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectPlanningView.vue:2393 can-force-start |
「強制開始」 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectPlanningView.vue:2430,2441,2457 can-edit |
子元件可編輯 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:187-191 isProjectManager、:195-199 isAuditor |
稽核總覽角色判斷 | M/A | 拆成下面各按鈕的能力點 | T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:210-213 canEditApAuthoring |
AP 撰寫可編輯 | A、M | proj.audit.judge |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:224,232-234 hasReviewRole、canReviewControl |
標記已審閱 | M、R | proj.review.approve |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1118 |
「指派稽核員」 | M | proj.participant.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1128 |
「自動分類證據」 | M | proj.evidence.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1141 |
「進入規劃頁」 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1147 |
「寄到期提醒」 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1170 |
「開始稽核」 | A、M | proj.audit.judge |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1181 |
「進入 POA&M」 | M | proj.poam.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:1338-1339 |
參與者角色標籤 | 四值 i18n | 專案角色名稱 | T-4.2 CM-2987 |
FE/views/project/ProjectAuditorOverview.vue:2065 can-force-start |
「強制開始」 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/MyTasksView.vue:229-254 isReviewer、isProjectManager |
我的任務角色判斷 | R/M | 拆成下兩列 | T-4.2 CM-2987 |
FE/views/project/MyTasksView.vue:601 canReturn |
「退回」任務 | M、R | proj.review.approve |
T-4.2 CM-2987 |
FE/views/project/MyTasksView.vue:602 canForceStart |
「強制開始」 | M | proj.job.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectApListView.vue:36-43,211 |
手動建輪次(ALLOW_MANUAL_ROUND_CREATE=false,另掛 v-can GRC_AUDIT_CREATE) |
M | proj.round.manage |
T-4.2 CM-2987 |
FE/views/project/ProjectApListView.vue:283 |
「發起複查」 | A、M | proj.audit.judge |
T-4.2 CM-2987 |
FE/views/evidence-classification/AutoClassifyBatch.vue:96-103,500 |
批次頁操作按鈕 | M | proj.evidence.manage |
T-4.2 CM-2987 |
FE/views/evidence-classification/AutoClassifyList.vue:62-66,144,296,361,462 |
批次列表建立/刪除/歸檔 | M | proj.evidence.manage |
T-4.2 CM-2987 |
FE/views/workflow/WorkflowSetupEditor.vue:93-97,503 isProjectLevelManager |
流程設定編輯(另掛租戶 v-can requiredCap) |
M(專案層) | proj.job.manage |
T-4.2 CM-2987 |
| file:line | 白話動作 | 現行判斷 | 對到的 proj.* |
哪張卡改 |
|---|---|---|---|---|
FE/views/flow-template/FlowTemplateEditorView.vue:130-132 roleOptions |
站「主要角色」下拉 | 四值 | 下拉列 proj.*(建議只列表 B「可當流程站」欄打勾者) |
T-4.3 CM-2988 |
FE/views/flow-template/FlowTemplateEditorView.vue:376-389,594、FlowTemplatePreviewDialog.vue |
存檔驗證、預覽顯示主要角色 | 四值 | 驗能力點名、顯示 display_name | T-4.3 CM-2988 |
app/flow_control/service/workflow_xml_sync_service.py 存檔驗證 |
後端存流程範本時驗 main_role |
無驗證 | 每個值必須在 proj.* 清單內,舊四值拒收 |
T-4.3 CM-2988 |
| # | name | display_name | 白話 | 可當流程站 | 負責人 | 審核者 | 稽核員 | 瀏覽者 | 備註 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | proj.project.read |
capability.proj.project.read |
看專案內所有內容、下載匯出 | ✓ | ✓ | ✓ | ✓ | 所有專案角色必含 | |
| 2 | proj.project.update |
capability.proj.project.update |
改專案設定、刪專案、雲端硬碟同步、收支援終止提醒 | ✓ | 刪除是否拆出見待裁 4 | ||||
| 3 | proj.participant.manage |
capability.proj.participant.manage |
增刪參與者、指派任務與審閱步驟 | ✓ | 舊 manager 守門語意的換算目標 | ||||
| 4 | proj.job.execute |
capability.proj.job.execute |
執行任務、上傳佐證、填答 | ✓ | 目前找不到需要它的接入點,見待裁 2 | ||||
| 5 | proj.job.manage |
capability.proj.job.manage |
增刪改任務、匯入任務、套用流程、強制開始、啟動執行、代被指派人操作、問卷設定、寄到期提醒 | ✓ | |||||
| 6 | proj.review.approve |
capability.proj.review.approve |
標記已審閱、退回、收「請審閱」通知 | ✓ | ✓ | ✓ | reviewer 換算目標 | ||
| 7 | proj.audit.judge |
capability.proj.audit.judge |
AP 撰寫、稽核判定、發現與觀察事項、風險、開始/完成稽核、發起複查 | ✓ | ✓ | ✓ | auditor 換算目標;audit_scope 只套在此 |
||
| 8 | proj.stage.advance |
capability.proj.stage.advance |
推進自己負責的階段 | ✓ | ✓ | ✓ | 判定改看站上 main_caps 後沒有接入點,見待裁 1 |
||
| 9 | proj.stage.advance-any |
capability.proj.stage.advance-any |
推進任何階段、強制推進、退回上一階段、收「未指派」進站通知 | ✓ | ✓ | 舊 manager 流程語意的換算目標 | |||
| 10 | proj.round.manage |
capability.proj.round.manage |
建立輪次、啟動稽核、結束輪次、各段退回 | ✓ | 新增,見待裁 5 | ||||
| 11 | proj.poam.manage |
capability.proj.poam.manage |
改善計畫、改善措施、里程碑建立與結案 | ✓ | |||||
| 12 | proj.report.read |
capability.proj.report.read |
看結案報告、匯出 | ✓ | ✓ | 見待裁 3 | |||
| 13 | proj.report.manage |
capability.proj.report.manage |
建立與發布結案報告 | ✓ | |||||
| 14 | proj.evidence.manage |
capability.proj.evidence.manage |
證據分類批次建立、上傳、分類、封存、歸檔、刪除 | ✓ | |||||
| 15 | proj.ssp.update |
capability.proj.ssp.update |
SSP 各區塊寫入、SSP 附件刪除、建 SSP 模組 | ✓ |
合併判斷:只在「沒有合理的自訂角色會把兩者拆開」時合併。表中只有負責人打勾的九個能力點在範例角色裡總是同時出現,但各自對應客戶常見的分工(例如只管 SSP 的顧問、只管證據分類的助理),因此不合併。唯一符合合併條件的是 proj.stage.advance 與 proj.job.execute——兩者都沒有實際接入點,處理方式見待裁 1、2,而非併入別的能力點。
定稿數量:設計稿 14 個+新增 1 個(proj.round.manage)=15 個;若待裁 1、2 都裁「刪」則為 13 個。
可當流程站:流程編輯器下拉建議只列打勾的三個(proj.review.approve/proj.audit.judge/proj.stage.advance-any),它們恰好是舊四值換算後會出現在站上的值;列全部 15 個會讓設計者選到「看專案」當主責,導致所有參與者都能推進。
| 通知/待辦 | 出處 | 收件人(新規則) |
|---|---|---|
| 進入新階段 | stage_entered_recipients.py、stage_entered_notify_service.py:44-55 |
有該站 main_caps 任一的參與者(持 proj.audit.judge 者再依 audit_scope 過濾)+有 proj.stage.advance-any 的參與者;站上沒有任何主責人時,有 proj.stage.advance-any 的參與者收「未指派」 |
| 批次完成「請審閱」 | job_batch_complete_query.py:239 |
有 proj.review.approve 的參與者 |
| 偵測完成 | detection_job_notify_query.py:156 |
被指派人+有 proj.review.approve 或 proj.job.manage 的參與者 |
| 偵測失敗 | detection_orchestration_service.py:1594 |
同偵測完成 |
| 任務到期提醒(排程與手動) | job_due_reminder_query.py:55 |
被指派人+有 proj.job.manage 的參與者 |
| 系統版本支援終止 | support_end_query.py:52 |
有 proj.project.update 的參與者 |
| 專案開始 | project_service.py:678 _notify_project_started |
收件人不變(全體參與者),信中角色欄改顯示專案角色名稱 |
| 我的稽核待辦 | auditor_dashboard_query.py:60、audit_plan_list_query.py:47,196 |
有 proj.audit.judge 的參與者(稽核計畫列表另含 proj.review.approve) |
| 我的 POA&M 待辦 | poam_dashboard_query.py:61 |
有 proj.poam.manage 的參與者 |
| 結案報告列表 | closing_report_list_query.py:27 |
有 proj.report.read 的參與者 |
| 列表顯示的「負責人」名字 | audit_plan_list_query.py:53,310、closing_report_list_query.py:32 |
角色為租戶預設負責人(is_default_owner)的參與者 |
| 列表顯示的「稽核員」名字 | auditor_dashboard_query.py:157 |
有 proj.audit.judge 且不是預設負責人的參與者 |
每項格式:問題 → 建議 → 理由。
proj.stage.advance 沒有接入點
main_caps 任一」後,proj.stage.advance 沒有任何守門或畫面會讀它。proj.job.execute 怎麼用
proj.job.execute」,這些人會失去自己任務的操作權;若不接,它就沒有接入點。proj.job.manage」。proj.report.read 在範例角色與 proj.audit.judge 同一組人。proj.project.update 拆出
GRC_PROJECT_DELETE。proj.project.update,刪除的額外門檻交給租戶 GRC_PROJECT_DELETE。proj.stage.advance-any
proj.round.manage。advance-any 是「流程站推進」,輪次是「稽核週期開關」,兩者在套件裡是不同的服務;併在一起會讓想給「流程推進員」權限的人順帶能結束整個稽核輪次。job_evidence_service.py:98,165,191 只驗參與者,瀏覽者也能改別人任務的佐證;檔案刪除那條(file_upload.py:124)卻已是「被指派人 ∪ 負責人」。proj.job.manage」。review_step_assign_service.py:95,110 現在是負責人。proj.participant.manage。manual_job_due_reminder_service.py:90 現在是負責人。proj.job.manage。project_summary_report_history_service.py:79 是寫入動作但只驗參與者。proj.report.manage。proj.project.read。evidence_classification_service.py:51 判「在任一專案當負責人」,沒有專案可展開專案能力點。grc.* 下既有的證據分類管理權)。proj.* 只在專案內有意義,跨專案判斷屬租戶層。proj.job.manage,被指派人那條路不動。needs_assign 誰會看到「待指派」
audit_plan_list_service.py:30-33 現在只對負責人亮「需指派稽核員」。proj.participant.manage。get_reviewers_for_task 沒有呼叫端
participant_role_service.py:86 依 reviewer 找人,但整個 codebase 沒人呼叫。proj.review.approve ∪ proj.job.manage ∪ 被指派人。proj.participant.manage」會把自訂的「副負責人」也列進去。is_default_owner 角色,稽核員欄跟 proj.audit.judge(排除預設負責人)。SurveyPreview.vue:1297 審核者看不到填答歷史,其他角色都看得到;後端歷史讀取對全員開放。proj.project.read。v-can 與專案層判斷並存
v-can(GRC_PROJECT_UPDATE/GRC_PROJECT_DELETE/GRC_AUDIT_CREATE/requiredCap)與專案角色判斷。v-can-project。