【发布时间】:2019-08-05 18:34:52
【问题描述】:
我已经尝试了几天在 MVC 项目中实现角色。我已经开始了一个新项目并选择了“个人用户帐户”的身份验证。我将 [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");
}
这将创建角色“管理员”并将其绑定到特定用户。 当我通过以下方式查看数据库中的表时:
select * from AspNetRoles
select * from AspNetUsers
select * from AspNetUserRoles
表格已填充并相互链接,但是当我使用 [Authorize(Roles="Admin")] 时会出现错误页面 401,但是当我通过以下方式读出用户的角色时:
var roles = await UserManager.GetRolesAsync(await UserManager.FindByEmailAsync(username));
它将返回值“Admin”。
可能是什么问题? 非常感谢您的任何建议!
【问题讨论】: