添加到用户的角色在IsInRole

时间:2019-04-02 08:46:54

标签: asp.net-core-mvc

我正在尝试使用[Authorize(Roles =“ Administrator”)] 但是我总是收到“ 访问被拒绝”。

要测试我是否正确添加了角色,我在控制器中添加了以下代码:

            var test=User.IsInRole("Administrator");  
            var user = await userManager.GetUserAsync(User);
            var roles =await userManager.GetRolesAsync(user);
            rolesOfUser = roles.ToList();

enter image description here enter image description here

我添加的角色错误吗?

Why does IsInRole always return false?建议用户未登录或未完成所​​有身份验证过程。如果是这种情况,我该怎么办?

播种数据:

public async Task SeedAsync()
{
    context.Database.EnsureCreated();

    if (await roleManager.RoleExistsAsync("Administrator") == false)
    {
        await roleManager.CreateAsync(new IdentityRole("Administrator"));
    }

    var user = await userManager.FindByEmailAsync("Jakob.Madsen@********.com");
    if (user == null)
    {
        user = new IdentityUser()
        {
            UserName = "Jakob.Madsen@*********.com",
            PhoneNumber = "*********",
            Email = "Jakob.Madsen@*********.com",
        };
        var result = await userManager.CreateAsync(user, "*********");
        if (result == IdentityResult.Success)
        {
            userManager.AddToRoleAsync(user, "Administrator").Wait();
        }
        else
        {
            throw new InvalidOperationException("Could not create Administrator");
        }
    }

    var resultRoles = await userManager.GetRolesAsync(user);
    if (resultRoles.Contains("Administrator") == false)
    {
        userManager.AddToRoleAsync(user, "Administrator").Wait();
    }
}

更新: 我按照建议遵循此ASP .Net Core Identity Role Claims not adding to User。 现在可以使用了。

1 个答案:

答案 0 :(得分:2)

IsInRole方法和[Authorize(Roles="Administrator")]属性检查此声明主体拥有的身份是否包含类型为ClaimsIdentity.RoleClaimTypehttp://schemas.microsoft.com/ws/2008/06/identity/claims/role)的声明,其中声明的值为等于role参数指定的值。

总而言之,如果您调用IsInRole,默认情况下将假设您代表角色的声明具有上述类型-否则角色检查将不会成功。您可以通过列出索赔来确认这一点:

var claims = User.Claims.ToList();

您没有提供角色的种子方式,但是您可以找到很多代码示例:

ASP.NET Core 2.0: Getting Started With Identity And Role Management

.NET Core 2.1 Use Role Management

也不要忘记注销并再次登录以查看所需的行为。