本卡屬 FR-114 資安修正(母卡 CM-2019),第 5 批「信任鏈與客戶層級設定」卡 5A-3,修 SUMMARY #22/#19/#134(出自 M22-1/M09-1/M22-3)。高。修法規格來自內化卡 CM-1985(M22 部分)與 CM-1987(M09 部分),計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b5A.md「卡 5A-3」段。
#22:任何一家客戶的子公司管理員都能改「全公司共用」的登入規則或 LDAP(企業內部帳號目錄)設定,等於子公司可以接管整個客戶集團的登入行為。
#19:同樣的問題發生在日誌轉送設定——子公司管理員可以把公司共用的日誌轉送目標地址改掉,等於能把全公司的操作日誌轉送到自己指定的地方。
#134:儲存設定頁把共用密鑰明文回傳給前端畫面,同樣是「遮罩名單漏登記」的病。
首腦核對:
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/<套件目錄>(branch fix/security-b1)改,只動自己那支套件的子目錄、只 git add 該子目錄下的檔。 本卡對應 jedi-system-core 與 jedi-log,各自 worktree(建議 jedi-wt-fix-security/jedi-system-core、.../jedi-log)。/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security(branch fix/security-b1)改,不要碰主 checkout(掃描線正在讀它)。跑服務用 PORT=8001。 本卡另涉 core/plugins/system_config.py、core/plugins/api_log.py、app/system_config/。pyproject.toml 把該套件的 pin 改成 jedi-xxx = { path = "/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-xxx", develop = true },poetry update jedi-xxx。這個 path 改動不 commit(git add 時跳過 pyproject.toml)。jedi-system-jedi-system-core/jedi_system_core/app/service/system_config_service.py:54 create,#22 第一支寫入路徑
jedi-system-jedi-system-core/jedi_system_core/app/service/system_config_service.py:80 update,#22 第二支寫入路徑
jedi-system-jedi-system-core/jedi_system_core/app/service/system_config_service.py:165 update_config_by_group_key,#22 第三支寫入路徑
jedi-system-jedi-system-core/jedi_system_core/api/routes/system_config_route.py:64 put,對應第二支寫入路徑
jedi-system-jedi-system-core/jedi_system_core/api/routes/system_config_route.py:98 post,對應第一支寫入路徑
core/plugins/system_core.py:62-75 _GROUP_CAPABILITY_RESOURCE,能力對照表
core/plugins/system_core.py:93 assert_config_capability,掛新判斷的正確位置
infra/system_config/system_config_root_reader.py:60,96,122 SET LOCAL is_super_admin,繞過隔離段
infra/system_config/system_config_root_reader.py:136 write_root_config_value
app/system_config/service/shared_config_app_service.py:38-41 SHARED_ROOT_CONFIGS 白名單
app/system_config/service/shared_config_app_service.py:68-78 write_shared_config
app/system_config/service/security_policy_app_service.py:108,162 三支寫入 BE 側落點之一
app/system_config/service/guarded_system_config_service.py:458,585,597,636,651 三支寫入 BE 側落點
jedi-iam/jedi_iam/domain/service/org_unit_domain_service.py:194 parent_id 取子節點,判斷「是否總部」可能可用
common/authz/license.py:16 is_root_tenant 旗標,需先 grep 確認能否直接 reuse
jedi-log/jedi_api_log/forwarding/api/routes/log_forwarding_route.py:57 put,#19 寫入路徑
jedi-log/jedi_api_log/forwarding/api/routes/log_forwarding_route.py:73 post 測試發送
jedi-log/jedi_api_log/forwarding/api/routes/log_forwarding_route.py:9 檔頭 adapters 說明
jedi-log/jedi_api_log/forwarding/plugin/contract.py:64-90 LogForwardingAdapters 契約,read/update 兩欄分開刻意
core/plugins/api_log.py:263 import
core/plugins/api_log.py:272 _forwarding_guard
core/plugins/api_log.py:288 forwarding_read_required
core/plugins/api_log.py:289 forwarding_update_required,要補判斷處
core/plugins/api_log.py:37-38 port 對照
jedi-log/jedi_api_log/forwarding/infra/model/log_forwarding_setting.py 設定落地
jedi-system-jedi-system-core/jedi_system_core/plugin/contract.py:61 DEFAULT_SECRET_MASKED_GROUPS,#134:少 STORAGE_CONFIG
jedi-system-jedi-system-core/jedi_system_core/plugin/contract.py:65 DEFAULT_SECRET_VALUE_KEYS,#134:少帳密欄位名
jedi-system-jedi-system-core/jedi_system_core/plugin/contract.py:113-114 相關設定
jedi-system-jedi-system-core/jedi_system_core/api/routes/system_config_route.py:20,42-44,57,73,104 遮蓋機制掛載點
jedi-system-jedi-system-core/jedi_system_core/api/__init__.py:9 遮蓋機制註冊
jedi-system-jedi-system-core/jedi_system_core/app/service/guarded_system_config_service.py:113 _AI_PROVIDER_SECRET_KEYS,現成 pattern
jedi-system-jedi-system-core/jedi_system_core/app/service/guarded_system_config_service.py:116 _CLEAR_FLAG
jedi-system-jedi-system-core/jedi_system_core/app/service/guarded_system_config_service.py:300-320 merge 邏輯,「不回密碼沒帶就沿用」的現成範本
jedi-system-jedi-system-core/jedi_system_core/app/service/guarded_system_config_service.py:119 _DRIVE_APP_GROUP
jedi-system-jedi-system-core/jedi_system_core/app/service/guarded_system_config_service.py:106 _HIDDEN_GROUP=STORAGE_CONFIG,既有隱藏處理(CM-1333),別弄壞
jedi-system-jedi-system-core/jedi_system_core/app/service/guarded_system_config_service.py:8 CM-1333 相關註解
jedi-system-jedi-system-core/jedi_system_core/infra/model/tenant_storage_config_seeder.py:42-43,53 group/key 常數
common/authz(決策者已裁定放這裡,一支給四處用)。先查再寫:先確認 common/authz/license.py:16 的 is_root_tenant 旗標能不能直接重用,或用 jedi-iam 的 org_unit_domain_service.py:194(parent_id 取子節點)判斷組織樹第一層。system_config_service.py 三支寫入路徑(:54/:80/:165)與 core/plugins/system_core.py:93(assert_config_capability)——只開放總部管理員改全公司共用設定;平台管理員(跨客戶)不受此限制。log_forwarding_route.py 的 :57(put)與 :73(post 測試發送),對應 core/plugins/api_log.py:289(forwarding_update_required)補判斷。優先序:LDAP 判斷先於登入政策判斷。