繁體中文(台灣)
  • saas
  • collaboration
  • organizations
  • rbac
  • multi-tenancy

幕後花絮:我們如何在多租戶應用中實現用戶協作

在多租戶應用中實現類似 Logto Cloud 協作的邀請和角色訪問管理功能的實踐和見解。

Charles
Charles
Developer

背景

上週,我們在 Logto Cloud 推出了協作功能。如果你錯過了,快來看看!現在,你可以邀請同事和合作夥伴加入你的現有 Logto 租戶,一起協作維護你的應用的身份系統。

在這次功能發布中,我們在每個 Logto 租戶中新增了兩個角色:

  • 管理員:完全訪問該租戶,包括管理身份相關資源、邀請和管理其他成員、處理帳單和查看帳單歷史。
  • 協作者:可以管理身份相關資源,但無法訪問其他管理功能。

為了遵循我們使用自己工具的承諾,我們利用了我們的 RBAC(基於角色的訪問控制)和組織功能來構建用戶協作。如果你對 RBAC 不熟悉,可以查閱 我們之前的文章以了解更多資訊。

在本文中,我們來看看實現這個功能的過程,以及如果你正在開發多組織應用,這些實踐可能會如何對你有用。

Logto Cloud 的協作是通過 Logto 組織構建的

我們系統中的每個 Logto Cloud 租戶都作為獨立的組織運行,並由我們自己的組織功能驅動。為了引入租戶管理員和協作者角色,我們在組織模板中創建了兩個組織角色,每個角色都分配了一組特定的組織權限。

組織角色
組織範圍

使用 Logto 管理 API 處理邀請

我們在組織功能中提供了一組與邀請相關的管理 API。使用這些 API,你可以例如:

  • POST /api/organization-invitations 創建並發送組織邀請到一個電子郵件地址
  • GET /api/organization-invitations & GET /api/organization-invitations/{id} 獲取你的邀請
  • PUT /api/organization-invitations/{id}/status 通過更新邀請狀態來接受或拒絕邀請

更多詳細信息,請參閱完整的 API 文檔

連接你的電子郵件連接器

由於邀請是通過電子郵件發送的,請確保你的電子郵件連接器已正確配置。在此版本中,我們引入了一個新的電子郵件模板用途類型,OrganizationInvitation,允許自定義邀請電子郵件模板。

邀請電子郵件範例

此電子郵件模板預設將接受一個 {{link}} 變量,這是 Logto Console 的登錄頁面鏈接,用戶可以在此接受邀請並加入 Logto 租戶。Logto Cloud 中的一個登錄頁面如下圖所示:

邀請登錄頁面

有關通過管理 API 發送邀請電子郵件的更多詳細信息,請參閱API 文檔

使用 RBAC 管理用戶權限

通過上述設置,我們可以通過電子郵件發送邀請,被邀請者可以以分配的角色加入組織。

具有不同組織角色的用戶在其訪問憑證中將具有不同的範圍(權限)。因此,客戶端應用(Logto Console)和我們的後臺服務應檢查這些範圍以確定可見的功能和允許的操作。

好吧,到目前為止一切似乎都已連接,那麼我們還缺少什麼呢?

處理訪問憑證中的範圍更新

管理訪問憑證中的範圍更新涉及:

  • 撤銷現有範圍:例如,將管理員降級為非管理協作者時,自動在使用現有刷新令牌獲得的新訪問憑證中縮小範圍。
  • 授予新範圍:相反,將用戶提升為管理員需要觸發重新登錄或重新同意過程,以反映用戶訪問憑證的變化。

在 Logto Cloud,中,Console 通過 SWR 請求主動檢查用戶範圍,當用戶升為管理員時,我們會自動同意。

如果你正在使用 RBAC 實現類似功能,你需要一個機制(例如 WebSocket 或服務器推送事件)來通知你的應用範圍更新,從而進行重新同意或相應地發放新訪問憑證。Logto 也將在未來更新中提供更多 webhook 來協助這一點。

總結

Logto Cloud 的多租戶和協作功能利用了我們的組織功能。如果你正在開發類似的多租戶應用,考慮使用這一功能并采用類似的方式。

希望這篇文章能對你有所啟發。如有問題或討論,隨時加入我們的 Discord 頻道