[英]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.