我正在尝试为将由多个租户使用的新Web应用程序创建架构。过去,我已经完成了多租户设计,每个租户都使用了一个架构,但是在这个新应用程序中,租户将需要能够广泛共享对数据的访问。
这是我使用伪应用程序的场景:
甲公司签署了“项目跟踪器”以跟踪其软件项目
乙公司也签约追踪他们的软件项目
公司A在Project Tracker中创建了一个包含大量工作项的新项目
然后,公司A将其中一些工作项目分配给公司B中将实际完成工作的用户(例如在承包商场景中)
而且我还需要支持另一个皱纹:
即使新软件项目的客户在技术上不是租户,他们也需要能够登录并查看项目状态
我意识到我可以使用单独的架构和联合用户来做到这一点,但是我正在尝试使体验比这更简单。由于它是一个Web应用程序,因此我想使用电子邮件地址作为联合点,以便公司A可以将工作项目分配到[email protected],当Joe使用该电子邮件地址登录时,他可以看到该工作项目。并可以在完成时将其标记为完成。
因此,我目前的想法是将基于行的多租户方法与基于对象的安全性一起使用。每个对象都有一组与之关联的角色(例如Admin,Reader,Writer),并且这些角色将与用户相关联。然后,我将使用它们来验证每个对象的权限,而不是使用tenant_id
之类的东西。
这意味着,如果有人提供访问权限,则任何人都可能可以访问系统中的任何对象。成为租户实际上只是使您成为权限层次结构的根管理员(在示例中,这是允许您创建项目实体的公司实体的管理员)。这意味着这不再是真正的多租户架构。
有没有更好的方法来处理这种情况?
最佳答案
您可以使用用户-角色-租户类型的映射,以及对应表中的tenantid列。因此,当[email protected]尝试访问companyA记录时,您可以检查companyA中是否存在[email protected]的角色来提供对companyA数据的访问。这样,从长远来看,它会更加安全和可靠。
关于mysql - Multi-Tenancy 数据库模式:处理租户需要共享数据的情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14078118/