繁体   English   中英

如何检查用户是否在 Asp.Net Core Identity Framework 中担任角色

[英]How to check if a user is in a role in Asp.Net Core Identity Framework

我有一个应用程序,它将具有多个级别的组织,并且对于每个级别,都会有权限(admin-reader-...)。

我想为每个用户创建(和维护)一个角色列表,但这意味着很多角色名称都是动态的,比如{id-of-the-organization]-admin

因此,我不能只做通常的Authorize

[Authorize(Roles = "Administrator, PowerUser")]
public class ControlAllPanelController : Controller
{
    public IActionResult SetTime() =>
        Content("Administrator || PowerUser");

    [Authorize(Roles = "Administrator")]
    public IActionResult ShutDown() =>
        Content("Administrator only");
}

我想要类似的东西

public class ControlAllPanelController : Controller
{
    [Authorize]
    public IActionResult SetTime(Guid organizationId) {
        someService.Authorize(organizationId+"-SetTime");//Throw exception or return boolean
        //... rest of my logic
    }
}

不确定如何实现这一目标? 我已经在IAuthorize服务中看到过这样的例子,但这需要提供策略名称,对于这种情况我没有(或者默认情况下可能有一个,但我不知道它的名称。`

我已经看到ClaimsPrincipal有一个IsInRole ,但我不完全确定它从 Asp.Net Core Identity Framwork(来自用户管理器)获取最新信息(仅存储在令牌中的内容?)?

可以使用HttpContext查看JWT中的声明。

我最近一直在使用 .NET API 中的授权,这就是我所做的:

var identity = this.HttpContext.User.Identities.FirstOrDefault();
var role = identity.Claims.FirstOrDefault(x => x.Type == "role").Value;
                    
if (role != "Admin")
{
    return Unauthorized("You don't have to correct permissons to do this.");
}

所以我正在获取身份详细信息,然后在声明中搜索role声明。

作为旁注,我在继承自ControllerBase的 controller 中使用它,因此我相信HttpContext是此 class 的属性,因此如果您正在使用它,则无需注入它。 否则,您可能必须通过 DI 使用它,但都应该一样工作。

暂无
暂无

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

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