繁体   English   中英

asp.net核心授权——从Claims中获取用户角色

[英]asp.net core authorization - Get User Roles from Claims

[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller 
{
    public IActionResult Payslip() =>
         Content("HRManager || Finance");
}

此代码来自 Microsoft,它知道此人用于访问此方法的角色。 如何捕获该列表并将其设置为列表 object? 是否可以? 我觉得这应该很简单,但找不到我正在寻找的任何代码示例。

所以我尝试了几种不起作用的方法,但我觉得它们应该起作用。

var claimsIdentity = (ClaimsIdentity) HttpContext.User.Identity;

var userIdentity = (ClaimsIdentity) User.Identity;
var claims = userIdentity.Claims;
var roleClaimType = userIdentity.RoleClaimType;
var identity = WindowsIdentity.GetCurrent().User;

// or...
var roles = claims.Where(c => c.Type == roleClaimType).ToList();

最后一行似乎可以工作,但再次无法提供人类可读的角色,它只是在其中包含一些看起来是二进制的 GroupID。

最终这最后一点有效,但我仍然无法从中获得角色列表。 这就是我最初想要的。

var IsInRole = HttpContext.User.IsInRole("Admin");

如果有人可以提供可以将其转换为角色列表的代码示例。 这就是我要寻找的结果。 代码应该简单易行,只需一两行即可完成我正在寻找的内容。

您可以使用此代码获取角色列表:

List<Claim> roleClaims = HttpContext.User.FindAll(ClaimTypes.Role).ToList();

如果你想要角色值作为字符串使用这个:

List<Claim> roleClaims = HttpContext.User.FindAll(ClaimTypes.Role).ToList();
var roles = new List<string>();

foreach (var role in roleClaims)
{
    roles.Add(role.Value);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM