如何在 .NET MVC Core 中使用角色

How to use roles in .NET MVC Core

几天来我一直在尝试在 MVC 项目中实现角色。我开始了一个新项目并选择了 "Individual user account" 的身份验证。我将 [Authorize] 添加到 HomeControllers Indexpage 并且一切正常。要添加角色,我包括:

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

到startup.cs ->ConfigureServices 然后从 startup->Configure

添加对以下函数的调用
private async Task CreateRole(IServiceProvider serviceProvider)
{
    var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    IdentityResult roleResult;
    roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));
}

private async Task SetUserAdmin(string username, IServiceProvider serviceProvider)
{
    var UserManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
    IdentityUser user = await UserManager.FindByEmailAsync(username);
    await UserManager.AddToRoleAsync(user, "Admin");
}

这将创建角色 "Admin" 并将其绑定到特定用户。 当我通过以下方式查看数据库中的 table 时:

select * from AspNetRoles
select * from AspNetUsers
select * from AspNetUserRoles

tables 被填充并相互链接但是当我使用 [Authorize(Roles="Admin")] 时会出现错误页面 401,但是当我读出用户的角色时通过:

var roles = await UserManager.GetRolesAsync(await UserManager.FindByEmailAsync(username));

它将return值"Admin"。

可能是什么问题? 非常感谢您的任何建议!

你是如何在启动文件中添加Identity的? 我认为 services.AddIdentity.

出错了

我使用:

services.AddIdentity<IndentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

这是 .Net Core 2.1 的已知错误

应该在2.2中解决