本卡屬 FR-114 資安修正(母卡 CM-2019),第 2 批「只驗登入、不檢查歸屬」卡 2-3,修 SUMMARY #7/#8/#52/#53/#115(出自 M06-1/M06-2/M06-5/M06-6/M06-11)。高。修法規格來自內化卡,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b2.md「卡 2-3」段。🔴 本卡要等第 1 批合回主線+套件發版後才能開工。

問題是什麼(白話)

流程引擎相關的五個問題:工作項證據列表/單筆讀取沒檢查歸屬(#7);工作項留言的讀取與編輯沒檢查歸屬,也沒有長度/筆數上限(#8);稽核輪次的「退回歷程」讀取收了 project_uid 參數卻沒真的拿來比對(#52);「目前進度」查詢與「進版」「退回」動作用了兩套不同來源的專案 ID,從沒互相核對過,形同各驗各的(#53);流程範本的列表與單筆讀取沒有掛權限檢查,但新增/修改/刪除卻都有,形成「讀比寫還鬆」的不對稱(#115)。

首腦核對:

工作區

跨 repo:BE 側在 /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security(branch fix/security-b1)改(api/flow_engine 部分),不要碰主 checkout,跑服務用 PORT=8001。

套件側:jedi-flow-engine 在 /Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-flow-engine(branch fix/security-b1)改;jedi-compliance-audit 在同目錄下的 jedi-compliance-audit 子目錄改。兩者都只動自己那支套件的子目錄、只 git add 該子目錄下的檔。BE pyproject.toml 對應兩個套件的 pin 改成 path 形式指向對應 worktree,poetry update 兩支套件名,path 改動不 commit。

在哪裡

job_evidence_route.py:27 → service:46   #7 工作項證據列表,補歸屬檢查
job_evidence_route.py:64 → service:67   #7 工作項證據單筆,補歸屬檢查
flow_engine_route.py:46   #8 留言 GET,補歸屬檢查+長度/筆數上限(複製 job_comment_service.py:45 寫法)
flow_engine_route.py:65   #8 留言 PUT,同上;notification_socketio_handler.py:41 即時推播確認未受影響
stage_rollback_route.py:56 → audit_round_app_service.py:870 list_stage_transitions   #52 project_uid 有收但未比對,補真的比對
stage_advance_route.py:27 → stage_advance_service.py:82 get_current_stage_info   #53 目前進度查詢,來源 A
stage_advance_route.py:48 → stage_advance_service.py:191   #53 進版動作,來源 B,需與來源 A/C 互相核對
stage_rollback_route.py:28 → stage_rollback_service.py:73   #53 退回動作,來源 C,需與來源 A/B 互相核對
flow_template_route.py:33   #115 列表,目前沒有守門
flow_template_route.py:62   #115 單筆,目前沒有守門
workflow_execution_service.py:126   共用通道 assert_project_participant(workflow_execution_id, known_project_id=None),優先重用
workflow_execution_service.py:141   共用通道 resolve_project_id_from_workflow,優先重用

怎麼修