Asp.Net核心身份-没有角色的简单授权表

时间:2020-08-05 16:06:31

标签: asp.net-core-mvc authorization asp.net-identity asp.net-core-3.1

我正在尝试为我的应用程序开发一种简单的用户授权机制,而不使用特定的Roles表。

User实体具有一个简单的Role枚举属性,我想在某些控制器上正确装饰Authorize属性。

也许我在这里遗漏了一些东西,但是如何让框架知道用户登录时或登录后立即扮演的角色

var result = await _signInManager.PasswordSignInAsync(usr, pwd, false, lockoutOnFailure: false);

然后使用Authorize属性?

2 个答案:

答案 0 :(得分:1)

UserManager.AddClaimAsync(TUser, Claim) method可以帮助向用户添加指定的声明,您可以尝试使用以下代码片段来满足您的要求。

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);

if (result.Succeeded)
{
    var user = await _userManager.FindByNameAsync(Input.Email);

    var userRole = CustomMethod_FindUserRole(Input.Email);

    await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, userRole));

    //...

    await _signInManager.RefreshSignInAsync(user);


    //...

答案 1 :(得分:0)

您可以使用身份服务器的ProfileService向特定用户添加角色声明。您需要添加的地方

claims.Add(new Claim("Role","Admin"));

另外,您还需要在starup.cs中实施策略

services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminCheck", policy =>
                          policy.RequireClaim("Role", "Admin"));
    });

在操作方法或控制器上,您需要将装饰器设置为

[Authorize(Policy = "AdminCheck")]
public class VacationController : Controller
{
    public ActionResult VacationBalance()
    {
    }
}

就是这样。