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

ASP.NET Core 2.2 MVC passing argument to authorization policy

所以我们或多或少都熟悉 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 年以上的员工等等等等等等。

不幸的是,我在网上找不到太多关于此的信息,这就是为什么我要问这是否可以在 ASP.Net MVC 中以某种方式实现?

谢谢

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