【发布时间】:2014-02-10 08:47:02
【问题描述】:
我们有一个多租户 ASP.NET 应用程序。到目前为止,租户已经相互隔离,但是现在我们有管理多个租户的代理,并且希望能够使用单个用户帐户管理所有租户。我正在尝试找出实现这一目标的最佳方法,希望不会对我们正在使用的现有技术做出太大改变。
相关技术细节:
- 成员和角色的 AspNetSqlMembershipProvider
- C# 4.0(即将成为 4.5)
- 表单验证
- aspx 和 MVC (v3) 页面
- 假设有 100 个或更多租户,因此任何解决方案都需要支持这一点
我相信这些要求与 SQL Server 的安全模型非常相似。我们有一组登录名,代表所有可以登录系统的用户。用户应该能够被赋予一个或多个数据库(租户)的角色。示例:用户 Bob 在公司 A 中具有管理员角色,但在公司 B 中只有用户角色。我们还为我公司的员工提供“系统管理员”角色,它允许我们访问任何租户以及特殊的管理权限,例如创建/删除租户等。
我对各种库、框架等进行了大量研究,但我没有找到任何令人信服的证据表明其他库或框架会比我们目前拥有的更好。所以我目前正在考虑如何让 Sql Membership 提供者做我想做的事,除非有人能指出我更好的方向。我也不确定我是否知道在此搜索的最佳字词。
我正在考虑两个选项:
- 仅向成员资格提供者添加少数角色,并在成员资格提供者之外处理“当前用户在此租户中是否具有此角色”的所有问题。成员资格提供者将用于处理对系统的基本访问。
- 将租户特定角色添加到成员资格提供商。我们将在系统中拥有(角色数)x(租户数)个总角色。每个新租户都会向系统添加另一组角色,例如“Tenant A:Admin”、“Tenant A:User”等。需要一些额外的表来管理关系,可能还需要一些自定义代码来确保访问权限从成员资格提供者那里请求正确的租户特定角色。
这些选项中的任何一个都好吗?还是我应该在其他地方寻求支持?
【问题讨论】:
-
嗨 Ted,我最近在这里回答了一个类似的问题,也许有用:stackoverflow.com/q/21165928/304832 简而言之,我认为选项 #1 将是最好的选择。
-
听起来像是在会员提供者之外处理租户特定角色,让会员提供者进行粗粒度访问是可行的方法。
标签: c# asp.net asp.net-mvc-3 asp.net-membership roleprovider