ASP.NET Core 2.2 MVC将参数传递给授权策略

时间:2019-09-20 04:57:36

标签: c# asp.net asp.net-mvc authorization asp.net-authorization

因此,我们大家或多或少都熟悉ASP.Net MVC和新的policy based authorization中的授权,其中最常用的示例是称为atLeast21的策略,该策略仅向以下用户授予对特定资源的访问权限: 21岁或以上的用户。

但是,如果我希望该策略可用于多个年龄段并将该年龄段作为参数传递,如以下示例所示,该怎么办?

[Authorize("AtLeast", new { age = 21 })]
public IActionResult Index()
{
    //some code here
    return View();
}

[Authorize("AtLeast", new { age = 25 })]
public IActionResult Index2()
{
    //some code here
    return View();
}

这样,我可以多次使用同一政策(AtLeast),而不必为我要检查的每个年龄段创建政策。

因此,如果我们要讨论限制用户年龄的问题,那么当然没有很多用例,但是如果我想说控制器中有多个动作而一个是针对员工的,则肯定有很多用例。在公司工作1年,一种是为工作超过1年的员工,一种是为在公司工作超过5年的员工,等等,还有更多用例。

不幸的是,我在Web上找不到太多有关此的信息,这就是为什么我问这在ASP.Net MVC中是否完全可以以一种或另一种方式实现?

谢谢

1 个答案:

答案 0 :(得分:1)

您必须创建参数化的授权属性。请在此处查看此示例https://docs.microsoft.com/en-us/aspnet/core/security/authorization/iauthorizationpolicyprovider?view=aspnetcore-2.2 它基于您使用的相同策略。