Asp.Net 核心身份 - 无角色的简单授权 table
Asp.Net Core Identity - simple Authorization without Roles table
我正在尝试为我的应用程序开发一个简单的用户授权机制,而不使用特定的角色 table。
User 实体有一个简单的 Role 枚举 属性,我想在某些控制器上正确修饰 Authorize
属性。
也许我在这里遗漏了一些东西,但是我怎样才能让框架知道用户在登录时或登录后的角色是什么
var result = await _signInManager.PasswordSignInAsync(usr, pwd, false, lockoutOnFailure: false);
然后使用Authorize
属性?
您可以使用身份服务器的配置文件服务向特定用户添加角色声明。需要添加的地方
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()
{
}
}
就是这样。
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);
//...
我正在尝试为我的应用程序开发一个简单的用户授权机制,而不使用特定的角色 table。
User 实体有一个简单的 Role 枚举 属性,我想在某些控制器上正确修饰 Authorize
属性。
也许我在这里遗漏了一些东西,但是我怎样才能让框架知道用户在登录时或登录后的角色是什么
var result = await _signInManager.PasswordSignInAsync(usr, pwd, false, lockoutOnFailure: false);
然后使用Authorize
属性?
您可以使用身份服务器的配置文件服务向特定用户添加角色声明。需要添加的地方
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()
{
}
}
就是这样。
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);
//...