当放在控制器顶部时,授权属性在ASP Core 2.2中不起作用。我将我的startup.cs配置为这样。
//Add Claims
services.AddScoped<IUserClaimsPrincipalFactory<User>, UserClaimsPrincipalFactory<User, Role>();
//Add Context
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddHttpContextAccessor();
services.AddDbContext<DbContext>();
services.AddIdentity<User, Role>(
config =>
{
config.SignIn.RequireConfirmedEmail = true;
config.User.RequireUniqueEmail = true;
}
)
.AddRoles<Role>()
.AddRoleManager<RoleManager<Role>>()
.AddDefaultUI(UIFramework.Bootstrap3)
.AddDefaultTokenProviders()
.AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
.AddEntityFrameworkStores<DbContext>();
//Add MVC
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthorization();
services.AddAuthentication();
UserClaimsPrincipalFactory可以正常工作,我可以通过UserManager访问视图中的声明,并根据声明中的角色过滤链接。
但是当我在控制器上执行此操作时。
[Authorize(Roles = "Administrator")]
[HttpGet]
public async Task<IActionResult> Index()
{
return View();
}
它不起作用,尽管我具有身份所需的角色,但我仍然无法访问。这是一个已知的错误,是否有人设法使角色属性在ASP Core 2.2中工作?
答案 0 :(得分:0)
//Add Claims
services.AddScoped<IUserClaimsPrincipalFactory<User>,
UserClaimsPrincipalFactory<User, Role>();
//these should be move AddMvc
services.AddAuthorization();
services.AddAuthentication();
//Add Context
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddHttpContextAccessor();
services.AddDbContext<DbContext>();
services.AddIdentity<User, Role>(
config =>
{
config.SignIn.RequireConfirmedEmail = true;
config.User.RequireUniqueEmail = true;
}
)
.AddRoles<Role>()
.AddRoleManager<RoleManager<Role>>()
.AddDefaultUI(UIFramework.Bootstrap3)
.AddDefaultTokenProviders()
.AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
.AddEntityFrameworkStores<DbContext>();
//Add MVC
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
答案 1 :(得分:0)
我已经基于在ASP Core 2.2中工作的声明获得了Roles。没有声明的角色不起作用(可以在ASP Core 3.0中修复)。
创建角色(角色表)并向这些角色添加用户(UserRole表)后,需要向RoleClaim和UserClaim表添加值。
编辑...
基本上将用户添加到角色,并使用IUserClaimsPrincipalFactory中的claimtypes.role返回角色或使用usermanager和rolemanager手动添加userclaim角色。