本卡屬 FR-114 資安修正(母卡 CM-2019),第 3 批「刪除沒人用的」卡 3-4,修 SUMMARY #121(出自 M21-issue-rescan)。中。SUMMARY 標「裁定刪除」,查無獨立內化工單;修法規格來自本批查證,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b3.md「卡 N-4」段。
任何一個登入帳號送一個空白查詢,就能把整張全站成員名冊(含電子郵件)撈回來。這是一個 HTTP 入口(route),呼叫一支「查全表」的服務方法,完全不檢查身分是否有資格看這份名冊。
🔴 首腦核對(本卡最重要的一件事,務必先讀):原本材料檔說「這整塊都沒人用,整塊刪」,但重新查證後發現這個判斷只對了一半。真正零呼叫的只有「這個對外洩漏的入口」;名冊背後的資料表(Members model)與它的同步程式(新增/修改/刪除成員),其實正被「意見回饋(feedback)」模組現行使用中的「指派負責人」功能呼叫。DEV 環境現在 members 與 issue_assignee_mapping 兩張表都是 0 筆,不是因為程式沒在用,而是因為還沒有人用過「指派負責人」這個功能。
【要刪除的洩漏入口,這一半是真的零呼叫】
jedi_issue/api/routes/issue_member_route.py:11-15 IssueMemberRoute.get()(:12 只有 @auth_required,沒有其他權限檢查)
jedi_issue/api/routing.py:19 import IssueMemberRoute,刪除
jedi_issue/api/routing.py:24 api.add_resource(...) 註冊,刪除
jedi_issue/api/routing.py:36 URL 清單條目,刪除
core/plugins/issue.py:176 註解提到這個 URL,更新(:186-188 整包掛載邏輯本身不用改)
config/app_modules.py:90 註解提到這個 URL,更新
jedi_issue/app/member/service/member_service.py:13-21 get_members()(「空查詢回全表」的那支方法,刪除)
jedi_issue/plugin/assembly.py:58-59 _member_service() factory,刪除
jedi_issue/plugin/assembly.py:82 member_service=given.member_service or _member_service,刪除
jedi_issue/plugin/contract.py:75 member_service 欄位宣告,刪除
jedi_issue/plugin/runtime.py:35 相關註解,更新
jedi_issue/plugin/runtime.py:48 相關註解,更新
jedi_issue/infra/member/repository/member_repostiory.py:23 .query(Members).all() 這支查全表方法,只刪這一支方法
【必須保留,不准動的資料表/model/同步程式(D-b3-1 定案範圍)】
jedi_issue/infra/member/repository/member_repostiory.py 檔案本身保留(只刪 get_members() 這支方法,其餘方法與 import 不動)
jedi_issue/infra/member/mapper/member_mapper.py 保留
jedi_issue/infra/member/models/member.py:6-19 Members model 保留(:16 email 欄位保留)
jedi_issue/domain/member/repository/ 保留
jedi_issue/domain/member/service/ 保留
jedi_issue/domain/member/entities/ 保留
jedi_issue/app/member/dto/member_dto.py 保留
jedi_issue/infra/issue/repository/member_repository.py:7-17 get_members_by_username()(活方法,不動)
jedi_issue/infra/issue/adapter/local/local_issue_adapter.py 保留,不動