【问题标题】:ASP .NET Core Custom Authorize Attribute for viewing users own data用于查看用户自己数据的 ASP .NET Core 自定义授权属性
【发布时间】:2021-05-07 21:26:44
【问题描述】:

场景:具有“查看”权限的用户 1 可以查看列表中的所有其他用户个人资料,当他们点击个人资料时,他们将被定向到该个人资料页面。

没有权限的用户2可以看到用户配置文件列表,但只能点击自己的配置文件查看,否则他们将被重定向到禁止。

不确定实施此授权检查的最佳方法。目前正在尝试使用这个问题的答案:Adding .Net Core Policy with variable Parameters on Requirements

但我不知道如何从这个控制器方法发送 id 参数并首先检查用户是否具有“查看”权限

[HttpGet("{id:int:min(1)}")]
[CustomAuthorizeAttribute(id)] // doesnt work
public async Task<ActionResult> GetUser(int id)

【问题讨论】:

    标签: asp.net-mvc asp.net-core authorization custom-attributes


    【解决方案1】:

    在那个方案中,参数是开发中的某个值,不是从路由中获取的。 [CustomAuthorizeAttribute(id)]在项目启动时被扫描,它不同于[HttpGet("{id:int:min(1)}")]

    在这种情况下,我认为您不需要定义CustomAuthorizeAttribute。如果一个用户可以查看所有配置文件,则需要在生成令牌时添加声明View

    new Claim("Permission", "View")
    

    在GetUser中,只需要判断用户是否有Claim即可。

        [HttpGet("{id:int:min(1)}")]
        public async Task<ActionResult> GetUser(int id)
        {
            if(User.Claims.Contains(new Claim("Permission", "View")))
            {
                //...
                return View();
            }else if(User.Claims.Contains(new Claim("id", id.ToString())))
            {
                //own id can view own profile
                return View();
            }
            else
            {
                return Forbid();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 2021-07-19
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      相关资源
      最近更新 更多