Files
member-platform/docs/ARCHITECTURE.md

2.0 KiB
Raw Blame History

member.ose.tw 架構總覽Keycloak 版)

核心模型

  • 業務層:companies -> sites
  • 身分層:users <-> sites(多對多,透過 user_sites
  • 能力層:systems -> roles
  • 授權層:sites <-> roles(多對多,透過 site_roles

權限模型(已定版)

  • permission 正式改名為 role
  • role 僅能指派給 site,不可直接指派給 user
  • system / role 以 Keycloak 為唯一建立來源member 後台只做同步顯示與關聯。
  • user 的有效角色由以下關聯推導:
    • user_sites(使用者屬於哪些 site
    • site_rolessite 擁有哪些 role
  • 不再使用舊的 permission_groups 主流程。

Key 規則

  • system_key: SYyyyyMMddX####
  • company_key: CPyyyyMMddX####
  • site_key: STyyyyMMddX####
  • role_key: RLyyyyMMddX####

Keycloak 同步策略

  • Keycloak 為唯一 IdP。
  • 群組階層:Company Group -> Site SubGroup
  • 系統角色:以 Keycloak client role 表示,對應 DB roles
  • site_roles 代表某 Site 擁有的 Keycloak role 集合。
  • 同步策略改為手動觸發:不在列表讀取 (R) 時自動同步。
  • 補齊策略:僅在手動同步按鈕(POST /admin/sync/from-provider)或 CUD 流程時同步。
  • 站台角色指派(PUT /admin/sites/{site_key}/rolesPUT /admin/roles/{role_key}/sites)會即時同步到 Keycloak Group Role Mapping。
  • 使用者加入 Site 時,透過同步邏輯使其在 IdP 端取得對應角色能力。
  • 讀取效能:後端採用 memory cache後續可換 RedisGET 先讀快取;POST/PUT/PATCH/DELETE 成功後自動失效快取。

後台安全線

  • /admin/* 必須 Bearer token。
  • 後端以 admin 群組白名單判定是否可進後台。
  • 有 Keycloak 帳號但不在 admin 白名單者,後台 API 一律拒絕。

API 白名單

  • 保留 api_clients 做系統對系統呼叫控管。
  • 管理後台登入控管與 API client 白名單是兩條獨立安全線。