Logto 的多租户模型解释
看看我们是如何设计 Logto 的多租户模型,以及它为 SaaS 应用程序带来的好处。
困惑
你可能听说过一些产品使用“多租户”这个术语来表示身份隔离:每个租户都有自己的一套用户、角色、权限和数据。
这可能违反直觉,但实际上,“多租户”表示相反的意思:多个租户在一个实例中共享资源。对于用户而言,应用程序中的身份就像驾驶执照。例如,使用一张驾驶执照,你可以在不同的州驾驶(在多个组织中使用一个身份),而不是为每个州重新申请新的驾驶执照。
Logto 的模型
在 Logto,我们在设计初期注意到了这种困惑,并急切地想为你的应用程序和用户解决这个问题。以下是我们的设计:
- 一个 租户 可以被视为一个单独的 Logto 实例,它有自己的一套用户、权限和数据。
- 在一个租户内部,它可以有多个 组织。用户可以是多个组织的成员。
- 对于每个组织,它遵循基于角色的访问控制模式(RBAC)并使用相同的一组组织角色和组织权限。这组内容称为 组织模板。
- 只有在组织的上下文中,组织角色和组织权限才会生效。
- 例如,一个用户可以在一个组织中是“管理员”(角色),但在另一个组织中是“成员”(角色)。
- 没有组织的上下文,组织角色和组织权限是没有意义的。
- 使用组织权限来控制组织内的访问,而不是使用组织角色。
这种模型为管理身份提供了灵活性和可重用性,特别是对于 SaaS 应用程序。如果我们看看一些流行的 SaaS 应用程序,我们会发现它们都可以适应这种模型。“组织”这个术语在不同的应用程序中可能有所不同,例如“工作区”、“团队”等。但概念是相同的。
例如,在 Notion (一个流行的协作工具)中:
- 你可以使用一个账户创建和加入多个工作区,而不需要为每个工作区注册不同的账户。
- 对于每个工作区,Notion 定义了 相同的一组 访问级别:“工作区所有者”和“成员”,虽然你可能期望不同的工作区有不同的访问级别。
因此,用户可以轻松地在工作区之间切换,而无需切换账户或重新登录,并且还能保持工作区之间的隔离。将此翻译成 Logto 的模型,这意味着:
- 组织模板 定义了两个角色:“所有者”和“成员”。
- 如果用户加入了一个工作区,这意味着用户是一个 组织 的成员,并且在 组织 中具有“成员”角色。
- 如果用户创建了一个工作区,这意味着用户是一个 组织 的成员,并且在 组织 中具有“所有者”角色。
根据不同的角色,用户可以在不同的工作区(组织)中拥有不同的权限。
好处
用户体验
对于用户来说,他们可以享受真正的单点登录体验。在组织之间切换就像在选项卡之间切换一样容易。
可重用性
SaaS 应用程序的一个优点是,它们是标准化并具有可扩展性的。例如,你可以在 Notion 中通过几个点击创建一个新的工作区,并且它可以立即使用。
当你的应用程序成长时,你可能想为每个组织添加更多的角色和权限。例如,一个新的角色“访客”和一个新的权限“邀请:访客”。如果你需要逐个更新所有现有组织,这可能会成为一场噩梦。
使用 Logto,你可以更新组织模板,所有现有组织会自动更新。
一个访问控制模型,多个使用案例
在 Logto 中,我们使用相同的访问控制模型(RBAC)来管理组织和 API 资源。这意味着如果你熟悉 RBAC,就不需要学习一个新的访问控制模型。同时,它们彼此隔离,因此你可以在不同的使用场景中使用它们。
最令人兴奋的是,你可以同时使用它们 。继续延伸 Notion 的例子:
- 对于访问工作区,你可以使用 Logto 组织 RBAC。
- 对于访问和更新账户级资源(如个人资料和账单信息),你可以使用 Logto API 资源 RBAC。
大多数 Logto SDK 支持这两种 RBAC 模型。
差异
组织 RBAC 和 API 资源 RBAC 主要在以下几个方面不同:
- 组织 RBAC 需要组织的上下文,而 API 资源 RBAC 不需要。
- 组织 RBAC 用于控制组织内的访问,而 API 资源 RBAC 用于控制对 API 资源的访问。
- 用户可以在不同的组织中拥有不同的组织角色,而 API 资源的角色在租户中是通用的。
- 角色和权限对于这两种 RBAC 是隔离的。
结束语
构建一个 SaaS 应用程序很困难,我们希望 Logto 可以帮助你专注于核心业务。如果你有任何问题或建议,请不要犹豫给我们反馈。