本卡屬 FR-114 資安修正(母卡 CM-2019),掃描線分析 CM-2108 第 3 件,決策者 09-24 裁同批到位。只重建一個資料庫檢視表,不改任何資料表、不回填資料。🔴 主線 migration(phase=active/envs=*)→ 出貨基線待重產。只改 BE。

問題是什麼(白話)

「我的任務」清單和儀表板待辦數讀的是檢視表 public.vw_user_job_queue。它從指派表起頭列出「指派給我的任務」——這是對的;但「屬於哪個專案」那欄也直接拿指派表的專案欄,和其他地方的判斷不同源。決策者要求全系統只有一套任務歸屬判斷,所以這一欄改成跟 CM-2113 同一條輪次鏈。

首腦 DEV 唯讀實查(09-24 11:00):指派表 12,573 列,其中屬於未軟刪專案的 77 列,輪次鏈全部查得到且 0 列不一致——改了之後現行畫面內容不會變,這張卡是讓來源統一、不是修畫面錯。

在哪裡(首腦核對過)

BE scripts/sql/view/vw_user_job_queue.sql   view 的 canonical 定義檔
  :21-24  陷阱註解+WITH (security_invoker = true)——CREATE OR REPLACE VIEW 不保留 reloptions,漏寫就靜默以 owner(BYPASSRLS)身分查=繞過全部隔離
  :32     a.project_id,                   ← 專案欄來源
  :75-83  FROM task_assignees a … LEFT JOIN job_executions b … LEFT JOIN projects d ON a.project_id = d.id …
          LEFT JOIN public.workflow_execution_control_mapping m ON m.workflow_execution_id = b.workflow_execution_id
          LEFT JOIN compliance.project_extensions pe ON pe.project_id = a.project_id …
  :99-100 WHERE d.status NOT IN ('archived')
最後一次改:scripts/sql/2026-09-14-fr094-cm1771-rls-workflow-executions-view-security-invoker.sql(:81 ALTER VIEW … SET (security_invoker = true))
讀者:infra/readmodel/tasks/my_grc_jobs_query.py:141-142(以 project_uid 過濾)
出貨基線:scripts/init/02-schema.sql 內有這個 view 的定義

⚠️ 掃描首腦原話說「它已經 LEFT JOIN 了 wecm 與 project_audit_rounds r」——首腦實查只 JOIN 了 wecm(m),沒有 JOIN project_audit_rounds,要自己補。

工作區

BE /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security   branch fix/security-b1

🔴 主 checkout 不動。與 CM-2113 同一工作區但不同檔,不衝突;不碰 pyproject/lock。

怎麼修

驗證