Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 复杂角色授权Asp.net核心MVC_Asp.net Mvc_Asp.net Core - Fatal编程技术网

Asp.net mvc 复杂角色授权Asp.net核心MVC

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属性可以实现提供访问或不提供访问。我的问题是:是否有一种处理部分访问的标准方法,其中一些用户可以根据角色访问所有内容和一些其他或少数资源,如下面的if语句所示? 在我看来,像下面所示的任何地方写if-else block都不对吗?如果有更好的方法,请提出建议

 [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);
}