多租户用户模型

时间:2010-08-14 23:23:58

标签: c# asp.net saas multi-tenant

在托管多个组织和应用程序的多租户系统中,如果组织可能使用系统上托管的多个应用程序,那么我的用户和角色模型是否应该可以跨多个应用程序和组织存在单个用户或角色?或者我应该将用户实体限制为单个组织/应用程序对,然后定义一些总体模型以将这些用户实体联系在一起?

那是:

  • John Doe是一个人

  • 他想使用ApplicationA和ApplicationB

  • 他为两家不同的公司工作(只跟我一起),OrganizationA和OrganizationB

用户模型应该是:

  1. johndoe @ someuniquesuffix是他唯一的用户名。这使他可以访问两个组织的两个应用程序。

  2. johndoe @applicationa @ organizationa是他在OrganizationA的ApplicationA用户名。 johndoe @applicationb @ organizationa是他在OrganizationA的ApplicationB的用户名......对于OrganizationB也是如此。然后有一些“主”列表,说明应用程序/组织的所有4个用户帐户都对应于相同的实际“人”,John Doe?

  3. 上述相同的场景适用于我将如何设计我的角色架构。

    感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

IMO,您应该将每组凭据限制为组织。此外,您应该使每个应用程序能够限制该组织中的用户可以对每个应用程序执行的操作。即,每个应用程序都应该管理自己的授权角色。您需要一些方法来处理Joe离开组织A但继续为组织B工作的场景。

答案 1 :(得分:2)

就我个人而言,我认为跟踪John Doe是在组织A和组织B都工作的一个人会使事情变得非常复杂,而不会在大多数情况下增加很多值 。除非你有明确的商业理由在你的模型中理解A的John Doe与B的John Doe 相同,否则我会避开它。维护所有组织中的用户数据库,不得不处理orgs 中的唯一名称​​('你的意思是John Doe已经有了什么?那不是我!')并且拥有UI模型(例如在登录时询问用户'你想今天处理A的数据还是B的数据?)只会增加很多复杂性。

我建议的一个缺点是,如果您使用第三方身份验证器(如OpenID或OAuth),则拥有多个租户的人必须使用不同的ID登录。例如。我使用谷歌openId登录我最终得到了A的数据,但是为了处理B,我需要使用我的Twitter帐户,因为我的Google ID已经绑定到A而且只有A。