【发布时间】:2012-12-14 05:26:50
【问题描述】:
我正在尝试为将由多个租户使用的新 Web 应用程序创建架构。我过去做过多租户设计,每个租户使用一个模式,但在这个新应用程序中,租户需要能够广泛地共享对数据的访问。
这是我使用伪应用的场景:
- A 公司注册“Project Tracker”以跟踪他们的软件项目
- B 公司也注册跟踪他们的软件项目
- A 公司在 Project Tracker 中创建了一个包含大量工作项的新项目
- 然后,A 公司将其中一些工作项分配给 B 公司内实际执行该工作的用户(例如使用承包商方案)
而且我还需要支持另一个皱纹:
- 新软件项目的客户也需要能够登录并查看项目状态,即使他们在技术上不是租户
我意识到我可以使用单独的架构和联合用户来做到这一点,但如果可能的话,我会尽量让体验比这更简单。由于它是一个网络应用程序,我想使用电子邮件地址作为联合点,以便公司 A 可以将工作项分配给 joe@companyb.com,并且当乔使用该电子邮件地址登录时,他能够看到工作项并且可以在完成时将其标记为已完成。
所以我目前的想法是使用基于行的多租户方法和基于对象的安全性。每个对象都有一组与之关联的角色(例如管理员、读者、作家),并且这些角色将与用户相关联。然后,我将使用这些来验证每个对象的权限,而不是使用 tenant_id 之类的东西。
这意味着如果有人向他们提供访问权限,任何人都可以潜在地访问系统中的任何对象。成为租户实际上只是让您成为权限层次结构的根部的管理员(在示例中,这是允许您创建项目实体的公司实体的管理员)。这意味着这不再是真正的多租户架构......
有没有更好的方法来处理这种情况?
【问题讨论】:
-
角色和授权听起来是正确的方法。您的角色将能够跨越租户,但这并不难。
-
酷,只是确保我没有完全走错路。
标签: mysql database schema multi-tenant