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



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

User实体有一个简单的Role枚举属性,我想适当地修饰一些控制器上的Authorize属性。

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

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

然后使用Authorize属性?

UserManager.AddClaimAsync(TUser,Claim(方法可以帮助向用户添加指定的声明,您可以尝试以下代码片段来实现您的要求。

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);

//...

您可以使用身份服务器的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()
{
}
}

就是这样。

最新更新