gpt4 book ai didi

c# - 具有租户特定角色的 ASP.NET Multi-Tenancy 应用程序

转载 作者:行者123 更新时间:2023-11-30 20:00:23 28 4
gpt4 key购买 nike

我们有一个 Multi-Tenancy ASP.NET 应用程序。到目前为止,租户彼此隔离,但现在我们有管理多个租户的机构,并希望能够使用单个用户帐户管理所有租户。我正在尝试找出实现该目标的最佳方法,希望不会对我们正在使用的现有技术进行太多更改。

相关技术细节:

  • 成员资格和角色的 AspNetSqlMembershipProvider
  • C# 4.0(即将成为 4.5)
  • 表单验证
  • aspx 和 MVC (v3) 页面
  • 假设有 100 个或更 Multi-Tenancy ,因此任何解决方案都需要支持该租户

我相信这些要求与 SQL Server 的安全模型非常相似。我们有一组登录名,代表所有可以登录系统的用户。用户应该能够被赋予一个或多个数据库(租户)的角色。示例:用户 Bob 在公司 A 中具有管理员角色,但在公司 B 中只有用户角色。我们还为我公司的员工提供“系统管理员”角色,允许我们访问任何租户以及专门的管理权限,例如创建/删除租户等

我对各种库、框架等进行了大量研究,但我还没有找到任何令人信服的证据表明其他库或框架会比我们目前拥有的更好。所以我目前正在考虑如何让 Sql Membership provider 做我想做的事,除非有人能指出我更好的方向。我也不确定我是否知道在此搜索的最佳术语。

我正在考虑 2 个选项:

  1. 仅向成员资格提供程序添加少量角色,并在成员资格提供程序之外处理所有“当前用户是否在此租户中拥有此角色”的问题。成员(member)提供程序将用于处理对系统的基本访问。
  2. 向成员(member)提供者添加特定于租户的角色。我们将在系统中拥有(# of roles)x(# of tenants)个角色。每个新租户都会向系统添加另一组角色,例如“Tenant A:Admin”、“Tenant A:User”等。可能需要一些额外的表来管理关系,还可能需要一些自定义代码来确保访问从成员提供者那里请求正确的特定于租户的角色。

这两个选项哪个好?还是我应该到别处寻找对此的支持?

最佳答案

我认为您无法将 Multi-Tenancy 硬塞进任何开箱即用的角色提供程序中,因此您不妨继续使用 SqlMembershipProvider(和 SqlRoleProvider)。即使是最新的 Microsoft.AspNet.Identity 仍然采用用户和角色之间的普通多对多。您真正需要的是将第 3 列添加到该多对多表的主键,这将标识您的租户,即:

user: 6
role: 4
tenant: 17

user: 6
role: 9
tenant: 18 (and so on)

...有了这个,您就可以让用户在不同的租约中拥有不同的权限,所有用户都使用同一组角色名称。

如果您选择选项 #2,那么您的 [Authorize] 属性将会爆炸式增长。想象一下:

[Authorize(Roles = "TenantA:Admin", "TenantB:Admin", ...)]
public ActionResult Post(int id, SomeViewModel model) {}

...所有这些属性都必须在编译时编写,除非您使用自定义的 AuthorizeAttribute,您可以这样做。但即便如此,每次向系统添加租户时,您仍然需要创建一组新角色,这不是必需的。

关于c# - 具有租户特定角色的 ASP.NET Multi-Tenancy 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com