FR-070 AI/Google Drive 憑證 DB 化與功能開通(需求草稿)

  • 日期:2026-09-02(user 拍板開新 FR)
  • 狀態:Phase 0 白話需求(brainstorm/design 未做)
  • 緣起:FR-069 收整期間調查「AI key 包版怎麼進去」發現:出貨物(image/安裝包/guidant.env)目前完全沒有 AI/Drive key 的進場機制——落地版裝完這兩類功能無 key 可用;而「包進出貨物」有洩漏風險(user 明確不要)。
§1

白話需求

把 AI 供應商金鑰(Anthropic/OpenAI 等)與 Google Drive OAuth 憑證(CLIENT_ID/SECRET)從環境變數改為存資料庫、由 UI 設定的功能開通機制

  1. 儲存system_configs 既有表,新 group(如 AI_CONFIG;Drive 併入雲端整合設定群)。加密落庫照 DETECTION_TOOL_ENCRYPTION_KEY/DRIVE_TOKEN_ENCRYPTION_KEY 既有 pattern。
  2. 設定 UI:系統設定頁新區塊;金鑰欄位遮罩顯示(GuardedSystemConfigService 既有守門殼)。
  3. 🔴 權限:只開放 admin tenant 設定(user 拍板)——守門用既有軸① require_platform_admin(root tenant),不另立新軸。
  4. 服務端讀取:AI 服務(jedi-ai-bot/ai-dashboard 等)與 Drive 整合改「DB 優先、env fallback」(fallback 保 DEV 開發便利;正式環境以 DB 為準)。
  5. 功能開通語意:沒 key=對應功能顯示「未開通」,不是壞掉;填了 key 即開通。
  6. 出貨面:key 從此不進 image/安裝包/guidant.env;POC 交付動線=裝完機 → admin tenant 登入 → 設定頁貼 key(與上傳 license 同動線)。
§2

邊界與既有資產

  • 憑證進的是「值」,schema 申報制(FR-069 記帳的第四階段議程)若屆時已成形,本 FR 為其 first case 之一;未成形也不阻塞,直接照 SMTP/ISSUE_INTEGRATE_CONFIG 先例做。
  • 加密金鑰本身(*_ENCRYPTION_KEY)仍在 guidant.env(裝機生成)——DB 密文+env 金鑰兩件分離,單獨拿到一樣解不開。
  • tenant-scoped:system_configs 已有 tenant_id;本 FR 的 AI/Drive 憑證屬系統級(root tenant 持有、全站共用),非各租戶自填——與「只開放 admin tenant 設定」一致。
§3

未定事項(brainstorm 要談)

  • AI key 是否分供應商多鍵、還是單一「啟用的供應商+key」;用量/配額顯示要不要做
  • Drive OAuth 換 key 時既有授權(refresh token)的遷移語意
  • env fallback 要不要有落日條款
  • FE 設定頁資訊架構(併儲存設定頁還是獨立頁)