【发布时间】:2013-11-09 01:30:39
【问题描述】:
我有一个使用 SimpleMembership 的多租户应用程序。我系统中的每个用户都链接到一个或多个租户。我只是通过将必填字段添加到用户模型(和租户)来扩展用户:
public class User{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public virtual ICollection<Tenant> Tenants { get; set; }
}
这很好用。但是现在我想让角色是特定于租户的,其中某些角色类型必须定义一个 TenantId。这并不像用户问题那么简单,因为以下各项都会受到影响:
添加角色、检查角色:
if (!Roles.Privider.RoleExists("Moderator")) // I now want to include TenantId here
{
roles.CreateRole("Moderator"); // and here
}
使用提供者分配/检查角色:
if (!Roles.IsUserInRole("Admin", "SystemAdministrator")) // and here
{
roles.AddUsersToRoles(new[] { "Admin" }, new[] { "SystemAdministrator" }); // and here
}
角色属性:
[System.Web.Http.Authorize(Roles = "SystemAdministrator")]
public class AdminApiController : BaseApiController
User.IsInRole:
if (User.IsInRole("Administrator"))
{
我对 ASP.NET 还很陌生,所以我不知道从哪里开始。我应该以某种方式覆盖 SimpleMembership Role Provider,还是应该考虑编写自己的 Role 列、类等?围绕身份验证手动编码任何内容都会感觉不对...任何关于此的指针将不胜感激。
【问题讨论】:
-
您能否详细说明一下。 “但现在我想让角色特定于租户,其中某些角色类型必须定义 TenantId。”是什么意思?尤其是“某些角色类型必须定义 TenantId”是什么意思。您是否希望角色具有指定的租户 ID?
-
@Raj - 是的,每个角色都应该有一个租户 ID。我能想到的一个例外是“租户管理员”角色,但这是一个我以后可以弄清楚的例外。
标签: asp.net asp.net-mvc asp.net-mvc-4 simplemembership