使用授权筛选器在核心 asp.net 实现基于权限的授权



我是 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();
}
}
}

并使用如下所示的过滤器

公共类 主页控制器 : 控制器 {

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

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

这样做有什么缺点吗,或者我应该坚持创建自定义的IAuthorizationPolicyProvider吗?

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

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

从这个回复:

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

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

相关内容

  • 没有找到相关文章

最新更新