【问题标题】:Identify the function name from policy middleware in .net core从 .net core 中的策略中间件中识别函数名称
【发布时间】:2019-09-17 08:52:01
【问题描述】:

我想使用 .net core webAPI 开发动态角色授权,我的结构是用户有一个角色,并且该角色有一些功能或特性可以访问

我的问题是有什么方法可以获取应用授权策略的函数名称

例如,我有以下代码

   [Authorize(Roles = "Admin", Policy = "isHasPermission")]
   public async Task<IActionResult> GetAllAsync()
    {
        var users = await _userService.GetAllAsync();
        var userDtos = _mapper.Map<IList<UserDto>>(users);
        return Ok(DataMessage.Data(new { users = userDtos }));
        //return Ok(userDtos);
    }

我的政策是这样的

protected override async Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        isHasPermissionRequirement requirement)
    {

      /*
       CAN I GET THE FUNCTION NAME "GetAllAsync" HERE!
       TO VALIDATE IF IT IS ONE OF USER'S FEATURE
      */

        return await Task.CompletedTask;
    }

所以我需要在策略中获取函数名称来验证用户的权限,如果可能的话?

【问题讨论】:

    标签: asp.net-core-mvc authorization asp.net-core-webapi policy


    【解决方案1】:

    你是在倒退:政策的运作方式是你说某个行动有要求。然后循环回到使用策略的地方不是一个有效的要求。策略应该与您尝试访问的内容完全分开。如果某件事指定了一项政策,那么只要政策的存在就足够了。

    如果您想让您的逻辑真正检查您尝试访问的什么,那么您可以改为查看authorization filters。当它们是called 时,它们会传递一个AuthorizationFilterContext,其中还包含有关用户尝试访问的路线和操作的信息。有了它,您可以使用 (context.ActionDescriptor as ControllerActionDescriptor).ActionName 获取操作名称。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2020-05-22
      • 1970-01-01
      • 2018-02-05
      • 2018-10-09
      • 2016-04-11
      • 2020-05-12
      • 2019-09-07
      • 2020-11-02
      相关资源
      最近更新 更多