Asp.net mvc 复杂角色授权Asp.net核心MVC
我编写了以下代码来处理授权。使用authorize属性可以实现提供访问或不提供访问。我的问题是:是否有一种处理部分访问的标准方法,其中一些用户可以根据角色访问所有内容和一些其他或少数资源,如下面的if语句所示? 在我看来,像下面所示的任何地方写if-else block都不对吗?如果有更好的方法,请提出建议Asp.net mvc 复杂角色授权Asp.net核心MVC,asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,我编写了以下代码来处理授权。使用authorize属性可以实现提供访问或不提供访问。我的问题是:是否有一种处理部分访问的标准方法,其中一些用户可以根据角色访问所有内容和一些其他或少数资源,如下面的if语句所示? 在我看来,像下面所示的任何地方写if-else block都不对吗?如果有更好的方法,请提出建议 [Authorize(Roles ="admin,superadmin")] public async Task<IActionResult> Index() {
[Authorize(Roles ="admin,superadmin")]
public async Task<IActionResult> Index()
{
if (User.IsInRole("superadmin"))
{
//get all groups
}
else
{
//get only groups that the user belong to
}
}
控制器
var authorizationResult = await _authorizationService.AuthorizeAsync(User, "HasAllAccess");
if(authorizationResult.Succeeded)
{
//fetch everything
}
else
{
// fetch partial data
}
有很多代码示例可用于: 对于您的需求,在继承自
AuthorizationHandler
的AuthorizationHandler
中修改HandleRequirementAsync
函数,您应该根据您的需求检查用户是否具有正确的角色:
if (context.User.HasClaim(ClaimTypes.Role, Roles.SurveyAdmin))
{
context.Succeed(requirement);
return Task.FromResult(0);
}
或:
基于System.Web.Http.Filters.AuthorizationFilterAttribute?joe Audette编写您自己的属性。但我们仍然必须对您提供的示例使用所有这些条件检查,对吗?您可以参考此内容了解您正在查找的基于资源的授权的custome授权属性:。不要听自定义属性的胡说八道。这是针对ASP.NET MVC的,不是针对Core的。请您提供以下问题的帮助:
var authorizationResult = await _authorizationService.AuthorizeAsync(User, "HasAllAccess");
if(authorizationResult.Succeeded)
{
//fetch everything
}
else
{
// fetch partial data
}
if (context.User.HasClaim(ClaimTypes.Role, Roles.SurveyAdmin))
{
context.Succeed(requirement);
return Task.FromResult(0);
}
if (context.User.IsInRole("super_user"))
{
context.Succeed(requirement);
return Task.FromResult(0);
}