本卡屬 FR-114 資安修正(母卡 CM-2019),第 1 批「權限地基」卡 1-5a,修 SUMMARY #42/#111(出自 M17-1/M17-3+M17-4)。中。修法規格來自內化卡,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b1.md「卡 1-5」段。決策者已裁「照建議」:公告新增「發送範圍」欄位(全公司/指定部門),舊資料一律標記全公司。🔴 本卡依賴卡 1-5b 的 migration 先套到 DEV,才能驗證欄位讀寫。

問題是什麼(白話)

#42:用網址直接打開一則公告時系統什麼都不檢查——調部門之後,舊部門的人拿舊網址照樣打得開這則公告;公告的更新/刪除也沒有檢查操作者是不是原作者。

#111:公告列表在使用者「沒有被分配部門」時,過濾邏輯整個失效、直接把全部公告都給看,變成後門。

首腦核對:

工作區

套件側:在 /Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-bulletin(branch fix/security-b1)改,只動自己那支套件的子目錄、只 git add 該子目錄下的檔。

跨 repo:BE 工作區 pyproject.toml 把 jedi-bulletin 的 pin 改成 path 形式指向上面那個套件 worktree,poetry update jedi-bulletin。這個 path 改動不 commit(git add 時跳過 pyproject.toml)。

在哪裡

bulletin_service.py:284-300  更新公告——補「是否為原作者」檢查+讀寫「發送範圍」欄位,org_units 未帶時不可清空既有設定
bulletin_service.py:303-315  刪除公告——補「是否為原作者」檢查
bulletin_service.py:212-236  get_bulletins_and_pager——部門過濾在 user_org_unit_id 為空時的行為要修:改成「發送範圍=全公司」的公告一定看得到,指定部門的公告只有在使用者有對應部門時才看得到,不是整個跳過過濾
bulletin_service.py:239-255  get_bulletins——同樣要看「發送範圍」欄位
bulletin_service.py:258-265  get_bulletin(單筆,#42 對應)——補「這則公告的發送範圍是否包含目前使用者」檢查
bulletin_route.py:66-73      PUT 路由層呼叫點
bulletin_route.py:77-82      DELETE 路由層呼叫點
bulletin_route.py:57-62      單筆 GET 路由層呼叫點

怎麼修

手測