【问题标题】:ASP.NET Core 2.2 MVC passing argument to authorization policyASP.NET Core 2.2 MVC 将参数传递给授权策略
【发布时间】:2020-01-21 03:17:13
【问题描述】:

所以我们都或多或少地熟悉 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 中以某种方式实现?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这似乎有效 - 谢谢,但我可以在剃刀视图中使用自定义授权策略提供程序吗?例如。在同一页面上仅向特定工作时间的用户显示几个内容?对于基于角色的授权,我可以说@if (User.IsInRole("SomeRole")),对于基于常规策略的授权,似乎有一个option,但是自定义策略提供者怎么样?
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2020-08-08
    • 2021-03-28
    相关资源
    最近更新 更多