gpt4 book ai didi

asp.net-mvc - Asp.Net 身份和 Multi-Tenancy 上的重复角色名称

转载 作者:行者123 更新时间:2023-12-03 15:58:22 26 4
gpt4 key购买 nike

我正在使用 ASP.Net MVC 和 Identity 2.0 开发 Multi-Tenancy Web 应用程序。我已经像这样扩展了 IdentityRole:

public class ApplicationRole : IdentityRole
{
public ApplicationRole() : base() { }
public ApplicationRole(string name) : base(name) { }

public string TenantId { get; set; }
}

这是因为每个租户都有各自的角色集,例如“管理员”、“员工”等。

但问题是,当我添加一个新角色时,如果“租户 A”具有“管理员”角色,当我将“管理员”角色添加到“租户 B”时,我会收到 IdentityResult 错误,因为使用了“管理员”名称...它有点明显,因为 AspNetRoles 表上的“名称”字段是唯一的...
IdentityResult roleResult = await RoleManager.CreateAsync(
new ApplicationRole
{
Name = "Admin",
TenantId = GetTenantId()
});

但是,我如何自定义 ASP.Net Identity,以便“AspNetRoles”中的“Name”字段可以与“TenantId”一起使用,而不是单独使用?我找到了有关扩展 IdentityRole 的信息(就像我添加了一个字段),但不是关于更改或替换它...

最佳答案

只需在 ApplicationDbContext 上更改数据库的架构的 OnModelCreating像这样的方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

var role = modelBuilder.Entity<IdentityRole>()
.ToTable("AspNetRoles");
role.Property(r => r.Name)
.IsRequired()
.HasMaxLength(256)
.HasColumnAnnotation("Index", new IndexAnnotation(
new IndexAttribute("RoleNameIndex")
{ IsUnique = false }));
}

但是必须自定义 RoleValidator类也。因为默认角色验证器会使重复的角色名称无效。
public class MyRoleValidator:RoleValidator<ApplicationRole>
{
public override async Task<IdentityResult> ValidateAsync(ApplicationRole item)
{
// implement your validation logic here

return IdentityResult.Success;
}
}

现在,每次创建角色管理器时,您都必须设置角色验证器。
roleManager.RoleValidator=new MyRoleValidator();

关于asp.net-mvc - Asp.Net 身份和 Multi-Tenancy 上的重复角色名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800273/

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