1

我正在尝试为将由多个租户使用的新 Web 应用程序创建模式。我过去做过多租户设计,每个租户使用一个模式,但在这个新应用程序中,租户将需要能够广泛共享对数据的访问。

这是我使用伪应用程序的场景:

  • A 公司注册“Project Tracker”以跟踪他们的软件项目
  • B 公司也签约跟踪他们的软件项目
  • A 公司在 Project Tracker 中创建了一个包含大量工作项的新项目
  • 然后,A 公司将其中一些工作项分配给 B 公司中将实际执行工作的用户(例如使用承包商方案)

而且我还需要支持另一个皱纹:

  • 新软件项目的客户也需要能够登录并查看项目状态,即使他们在技术上不是租户

我意识到我可以使用单独的模式和联合用户来做到这一点,但如果可能的话,我试图让体验比这更简单。由于它是一个网络应用程序,我想使用电子邮件地址作为联合点,以便公司 A 可以将工作项分配给 joe@companyb.com,并且当乔使用该电子邮件地址登录时,他能够看到工作项并且可以在完成时将其标记为已完成。

所以我目前的想法是使用基于行的多租户方法和基于对象的安全性。每个对象都有一组与之关联的角色(例如管理员、读者、作家),并且这些角色将与用户相关联。然后,我将使用这些来验证每个对象的权限,而不是使用类似tenant_id.

这意味着如果有人向他们提供访问权限,任何人都可以潜在地访问系统中的任何对象。成为租户实际上只是让您成为权限层次结构的根部的管理员(在示例中,这是允许您创建项目实体的公司实体的管理员)。这意味着这不再是真正的多租户架构......

有没有更好的方法来处理这种情况?

4

1 回答 1

0

您可以使用用户 - 角色 - 租户类型的映射以及相应表中的租户 ID 列。因此,当 joe@companyb.com 尝试访问 companyA 记录时,您可以检查在 companyA 中是否存在 joe@companyb.com 的角色,该角色提供对 companyA 数据的访问权限。从长远来看,这种方式更加安全可靠。

于 2013-04-28T17:19:06.223 回答