本卡屬 FR-114 資安修正(母卡 CM-2019),第 1 批「權限地基」卡 1-4b,修 SUMMARY #39(出自 M05-8)。中。修法規格來自內化卡,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b1.md「卡 1-4」段。
問題是什麼(白話)
問卷討論串的刪除目前是硬刪除(直接從資料庫拿掉),沒有軟刪除機制,卡 1-4a 要把它改成軟刪除,需要先在資料表補上對應欄位。
首腦核對:
- 已用 \d 查過 DEV 的 survey.survey_discussions,確認 is_deleted/deleted_at/deleted_user/status 這類欄位全部不存在
- 該表已有 4 條 RLS 政策(select/insert/update/delete,依附 surveys 可見範圍),新增欄位不影響既有政策,但軟刪除後的資料仍會通過 select 政策——濾除邏輯要靠讀取層做,不是這支 migration 的責任
工作區
BE 側:在 /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security(branch fix/security-b1)改,不要碰主 checkout。跑服務用 PORT=8001。
在哪裡
scripts/sql/ 新增一支 migration 檔,在 survey.survey_discussions 加軟刪除欄位(is_deleted/deleted_at/deleted_user,命名照既有其他表的軟刪除欄位慣例對齊,先 grep 既有表確認命名一致)
怎麼修
- ① 先 grep scripts/sql/ 既有其他表的軟刪除欄位命名慣例,對齊命名(不要自己發明新名字)
- ② 新增 migration:ALTER TABLE survey.survey_discussions 加上軟刪除欄位;每個語句加日期註解+檔頭 -- Date:
- ③ 這是既有表加欄位,不是新建表,不需要額外 GRANT(既有 GRANT 已涵蓋整張表),但要確認一下
- ④ 收尾 INSERT public.schema_migrations
- ⑤ 用 psql --single-transaction -v ON_ERROR_STOP=1 -f <檔> 以 cmmgr 帳號套用到 DEV(只套 DEV,不套 STG/POC)
手測
- DEV:套用 migration 後 \d survey.survey_discussions 確認新欄位存在、預設值合理(新資料預設未刪除)
- DEV:既有討論資料的軟刪除欄位值正常(未刪除狀態),不影響既有資料讀取
- DEV:schema_migrations 表有新增這支的紀錄