本卡屬 FR-107(母卡 CM-1843),第 .1 棒:暫存批次與安全地基。這是子需求卡,實際工作在底下的子任務卡。

這一棒在做什麼(白話)

使用者要能「開一個籃子、把一堆證據檔丟進去」,這個籃子叫暫存批次——一批還沒分類、還沒掛任何任務的檔。這一棒把籃子本身做出來:兩張新資料表(批次、批次裡的檔)、四支 API(建批次/上傳/列表/刪檔)、一個前端上傳頁。

同時補一個上線門檻級的安全洞:系統存所有上傳檔的那張表 upload_files 現在沒有租戶欄位、沒有擁有者、沒有 RLS(資料列層級權限,讓資料庫自己擋跨租戶讀取)。以前這張表靠「掛它的表」(例如任務證據表,那張有 RLS)間接保護;但暫存區的檔還沒掛任何東西,這層保護不存在——任何人拿到檔案編號就能讀別家公司的證據。這一棒的第一張卡就是補這個。

另外加一個防呆:系統還沒設定「檔案要存到哪」的時候,上傳要明確報錯(回 412 並說「請先到系統設定完成儲存設定」),而不是偷偷寫到 /tmp 然後重開機就不見。

為什麼切這一塊

這一棒是整案的地基——後面每一棒都吃它的產出(批次表、批次 API、儲存位置)。而且 upload_files 補 RLS 是「准不准上線」的硬門檻,必須先做完才有資格把這張表當暫存區用。

子任務清單

完成怎麼判定(決策者親手可做)

兩個不同租戶的帳號各上傳一批,A 帳號打 B 的批次 API 拿到 403;DEV 查 upload_files 新列都有 tenant_id;DEV 清掉儲存設定再上傳,畫面看到明確錯誤(不是成功)。

依賴

無前置,整案從這裡開工。下游:.2 吃本棒的 IEvidenceStorage port 與批次表。

相關座標