Asp.net core Net核心基于角色的身份验证,在取消每个用户一个角色的多对多关系之后

Asp.net core Net核心基于角色的身份验证,在取消每个用户一个角色的多对多关系之后,asp.net-core,entity-framework-core,asp.net-identity,Asp.net Core,Entity Framework Core,Asp.net Identity,我有以下类定义具有自定义角色的用户: 公共类应用程序用户:IdentityUser { //一些道具 [范围(0,2)] 公共短角色代码{get;set;} } 以及DBContext: public类ApplicationDbContext:IdentityUserContext { //删除未使用的字段 模型创建时受保护的覆盖无效(ModelBuilder) { builder.Entity().Ignore(c=>c.phonenumberconfirm) .忽略(c=>c.TwoFac

我有以下类定义具有自定义角色的用户:

公共类应用程序用户:IdentityUser
{
//一些道具
[范围(0,2)]
公共短角色代码{get;set;}
}
以及DBContext:

public类ApplicationDbContext:IdentityUserContext
{
//删除未使用的字段
模型创建时受保护的覆盖无效(ModelBuilder)
{
builder.Entity().Ignore(c=>c.phonenumberconfirm)
.忽略(c=>c.TwoFactorEnabled)
.Ignore(c=>c.PhoneNumber)
.Ignore(c=>c.LockoutEnabled)
.Ignore(c=>c.LockoutEnd)
.忽略(c=>c.AccessFailedCount);
}
}
我已经实现了一种将角色添加到用户声明中的方法

公共类应用程序ClaimsIdentityFactory:Microsoft.AspNetCore.Identity.UserClaimsPrincipalFactory
{
用户管理器(UserManager);;
公共应用程序LaimsIdentityFactory(UserManager用户管理器,
IOOptions OptionAccessor):基本(用户管理器、OptionAccessor)
{ }
公共异步覆盖任务CreateAync(ApplicationUser用户)
{
var principal=await base.CreateAsync(用户);
var claimsIdentity=((claimsIdentity)principal.Identity);
索赔实体。添加索赔(新[]{
新声明(ClaimTypes.Role,((ApplicationUserRole)user.RoleCode).ToString()),
});
返还本金;
}
}
该角色现在是用户登录后声明的一部分:

private readonly-SignInManager\u-SignInManager;
/* ... */
var result=wait _signInManager.PasswordSignInAsync(model.UserName、model.Password、model.RememberMe、lockoutOnFailure:false);
启动服务注册

services.AddDefaultIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders()
.AddDefaultUI();
services.addScope();
用户登录时可以更改角色,如何获取
[Authorize]
属性来检查数据库中的角色