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