繁体   English   中英

使用授权过滤器在ASP.NET Core中实施基于权限的授权

[英]Using Authorization filters to Implement permission based authorization in asp.net core

我是ASP.NET Core的新手,我一直在尝试寻找一种实现基于权限的授权的方法,其中用户必须具有特定权限才能访问特定操作。 当我浏览Microsoft授权文档时,他们解释了如何使用自定义的IAuthorizationPolicyProvider来实现此目的,我已经了解但尚未尝试过。 但是我的问题是,如果我使用自定义的参数化授权过滤器执行相同操作,是否有问题或可以吗?

公共类HasPermissionAttribute:Attribute,IAuthorizationFilter {私有只读字符串权限;

    public HasPermissionAttribute(string permission)
    {
        this.permission = permission;
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var user = context.HttpContext.User;
        if (user.HasClaim("Permission", permission))
        {
            context.Result = new UnauthorizedResult();
        }
    }
}

并使用过滤器,如下所示

公共类HomeController:控制器{

    [HasPermission("User_Edit")
    public IActionResult EditUser()
    {
        var user = HttpContext.User;
        return View(user);
    }
}

从上面的代码中,如果我添加一些“权限”类型的自定义声明,然后使用它们来授权用户,该怎么办。

这样做有什么弊端,还是我应该坚持创建自定义IAuthorizationPolicyProvider?

我是一个初学者,我认为这种方法太简单了,有点让我认为这不是实现我想要实现的目标的正确方法。 任何反馈将不胜感激。 谢谢

推荐的方法是使用基于策略的方法,使用使用自定义授权属性的自定义AuthorizationPolicyProvider动态生成策略。

从此回复

我们不希望您编写自定义授权属性。 如果您需要这样做,我们做错了。 相反,您应该编写授权要求。

这里的类似讨论也供您参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM