Skip to Content
核心概念洞察系統

Insight systems 與載入開關

一個聊天室可能被授權讀取許多部門表,但聊天分析不一定要每次載入全部資料。Insight systems 讓聊天室管理者以「部門 tag 組成的系統」為單位選擇載入內容,同時保留原本 ACL 不變。

System 是部門 tag 的即時投影

Insight endpoint 只考慮兩者交集:

  1. 部門範圍中以 tag 分組的資料表。
  2. 目前已透過 chatroom grant 分享給這個聊天室的資料表。

每個 eligible 部門 tag 會成為一個 system,回應帶 tag_id、名稱、部門、enabled 與目前屬於這個 tag 且已授權的 tables。它不是複製出來的資料 bundle,也不保存 table ID 快照。

{ "systems": [ { "tag_id": "33333333-3333-4333-8333-333333333333", "name": "訂單系統", "department_id": "22222222-2222-4222-8222-222222222222", "enabled": true, "tables": [ { "table_id": "44444444-4444-4444-8444-444444444444", "name": "訂單" } ] } ], "untagged": [] }

管理者的 opt-in 開關

聊天室管理者從這個 absolute endpoint 讀取與替換選擇:

GET /private/chatrooms/setting/custom-table-tags/{chatroom_id} PUT /private/chatrooms/setting/custom-table-tags/{chatroom_id}

PUT body 是完整 replace-set,不是增量 patch:

{ "tag_ids": ["33333333-3333-4333-8333-333333333333"] }

送空陣列代表關閉所有「有 tag」的 systems。重複 ID 會被去重;不是這個聊天室 eligible system 的 tag ID 會被拒絕。成功後請以回傳或再 GET 的結果更新 UI,不要在本地只翻轉一個 boolean。

只有載入行為改變

Flip row 存在代表載入,缺少代表不載入。它不會建立、修改或撤銷 chatroom grant,也不會改 can_readcan_insertcan_edit、row filter 或可見欄位。

Untagged 永遠載入

已分享給聊天室、但沒有任何 eligible 部門 tag 的表會出現在 untagged。這些表沒有 system switch,因此永遠載入。要讓管理者能切換它,必須先在部門範圍把表加入一個 tag;不能用送一個不存在的 tag ID 來隱藏。

聊天室自己擁有的表與 client-specific 載入也不受這組部門 tag flip 縮限。這個功能專門控制「已授權的部門系統」是否進入聊天分析的載入集合。

Bundle drift 會跟著 live 狀態走

伺服器只保存選中的 tag_id。每次讀設定或建立 insight 載入集合時,都重新查看 live grants 與 live tag assignments。因此:

  • 已啟用 tag 新增一張已授權表後,新表會自動加入載入 bundle。
  • 表從已啟用 tag 移出後,會自動離開該 bundle;若它變成 untagged,反而改走「永遠載入」。
  • 聊天室 grant 被撤銷後,表會立即失去 eligibility,即使 tag flip row 還存在也不會載入。
  • 尚未啟用 tag 之後新增表,仍維持不載入,直到管理者選取該 tag。

這種 drift 是預期行為。管理 UI 應顯示 endpoint 當下回傳的 tables,並在 tag/grant 管理完成後重新抓取;不要把第一次看到的 bundle 固定在前端。

安全心智模型

把兩層分開看最清楚:

ACL / grant:這個聊天室與使用者「可以」存取哪些資料 Insight flip:在已可存取集合中,聊天分析「要載入」哪些 tagged systems

即使 system 已啟用,實際載入仍再次套用呼叫者的 row/column ACL。即使 system 關閉,擁有 grant 的使用者仍可直接用 API 存取允許的資料;關閉不是安全撤權功能。

完整請求與錯誤見 Insight 參考Tags 參考。實作「授權 → tag → flip」流程請看Grants + Insight 指南建立系統精靈

Last updated on