微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP .NET Core 自定义授权属性,用于查看用户自己的数据

如何解决ASP .NET Core 自定义授权属性,用于查看用户自己的数据

场景:具有“查看”权限的用户 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)

解决方法

在那个解决方案中,该参数是开发中的某个值,不是从路由中获取的。 [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();
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。