使用授权过滤器在 asp.net 核心中实现基于权限的授权

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

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

public class HasPermissionAttribute:属性,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();
        }
    }
}

并使用如下所示的过滤器

public class 家庭控制器:控制器 {

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

根据上面的代码,如果我添加一些类型为 "Permission" 的自定义声明,然后使用它们来授权用户会怎么样。

这样做有什么缺点吗?还是我应该坚持创建自定义 IAuthorizationPolicyProvider?

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

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

来自 :

We don't want you writing custom authorize attributes. If you need to do that we've done something wrong. Instead you should be writing authorization requirements.

类似的讨论here也供大家参考