AuthorizationPolicy 与 AuthorizationFilter

问题描述 投票:0回答:1

有很多基于用户是否超过 18 岁来创建授权策略的示例。假设我想根据我决定的任何年龄授权页面——基于我正在显示的页面(即一个页面可能只可供 21 岁(喝酒)、25 岁(租车)、35 岁(成为美国参议员)或 55 岁(美国退休人员协会)等的人使用

针对每个年龄段的硬编码政策是否有意义?

构建大量自定义基础设施来支持一些新的自定义策略是否有意义?

像这样简单的东西呢(显然,我将一些代码留给想象)...

public class AgeAuthorizationAttribute : Attribute, IAuthorizationFilter
{
   public AgeAuthorizationAttribute(int age)
   {
     ...
   }

   public void OnAuthorization(AuthorizationFilterContext ctx)
   {
      if (!IsNotOldEnough())
         ctx.Result = new ForbidResult();
   }
}

然后这可以在任何地方使用,比如

[AgeAuthorization(25)]
public class MyController
{
}

现在不喜欢使用这样的过滤器吗?是否有 easier 方法来通过政策实施?是否有任何理由更喜欢通过政策来实施它?

c# asp.net-core authorization asp.net-authorization
1个回答
0
投票

针对每个年龄段的硬编码政策是否有意义?

实际上,无论是在控制器中还是在更细粒度的某个地方,我们都必须硬编码定义我们的条件。因此,要么你在 AgeAuthorization 过滤器中传递你的论点,要么你会检查你的 AgeAuthorization 授权政策 我们必须检查某个地方我们需要检查实际年龄来检查。

构建大量自定义基础架构来支持是否有意义 一些新的自定义策略?

由于授权策略由一个或多个要求组成,从而产生更丰富、可重用、可测试的授权结构,因此,您始终可以自定义您的策略。您可以在官方文档中查看类似的实现。

现在使用这样的过滤器不受欢迎吗?

虽然,授权策略动作过滤器在某些情况下可以做类似的事情,我们可以认为您的场景同时使用授权策略和动作过滤器我们可以满足我们将根据年龄限制访问的要求。

然而,授权政策在其可支持性方面具有一些优势。例如,在 razor 页面中我们不能使用动作过滤器。。在这方面,授权政策将具有更大的灵活性。

是否有更简单的方法通过政策来实施?在那里 有什么理由更喜欢通过政策来实施这个?

关于 asp.net core MVC 和 asp.net core web Api,您可以同时使用基于策略的授权和操作过滤器,并且实现非常相似。所以我想说,这似乎是验证年龄限制的一般方法,我已经在上面分享过。

上述概念的一部分,您甚至可以考虑 中间件ValidationAttribute 来满足您的实现。

注意: 由于此时您没有编码挑战,所以我不会分享任何实现细节。如果您要开始进一步实施,请随时 查看我们上面的官方文件。 或者您也可以在新问题上发表您的疑虑。

© www.soinside.com 2019 - 2024. All rights reserved.