如何在 .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中解决
几天来我一直在尝试在 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中解决