繁体   English   中英

多个 AuthorizationHandler 与带有 Switch/If 语句的单个 AuthorizationHandler

[英]Multiple AuthorizationHandlers vs. Single AuthorizationHandler with Switch/If Statements

我已经在 ASP.NET Core 2.2 中成功实现了基于策略的授权 我相信我理解AuthorizationHandlers如何OR基础上执行需求检查的概念

但是,除非我遗漏了某些东西,否则不能在单个处理程序中完成相同的OR基础评估吗? 为什么不直接使用 if 语句来说明如果此需求具有此属性,请执行此操作; 或者如果这些条件中的任何一个通过,则需求成功。 甚至他们页面上带有BuildingEntryRequirement的示例似乎也可以通过单个处理程序完成:

public class ExampleBuildingEntryHandler : AuthorizationHandler<BuildingEntryRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
        BuildingEntryRequirement requirement)
    {
        if (context.User.HasClaim(c => c.Type == "TemporaryBadgeId" && c.Issuer == "https://microsoftsecurity") ||
            context.User.HasClaim(c => c.Type == "BadgeId" && c.Issuer == "https://microsoftsecurity"))
        {
            // We'd also check the expiration date on the sticker.
            context.Succeed(requirement);
        }

        //TODO: Use the following if targeting a version of
        //.NET Framework older than 4.6:
        //      return Task.FromResult(0);
        return Task.CompletedTask;
    }
}

是否有我错过的需要使用多个处理程序的场景?

如果您正在定义所有相关的实现,则不,您可以使用单个处理程序。

事实上,无论您有什么要求,您都可以开发一个完全满足您需求的自定义处理程序。

如果您认为一个示例可能具有完全不同的授权实现,那么这些示例会更有趣。 喜欢:

  1. 完全基于 cookie,通过复杂的 JWT 令牌。
  2. 基于数据库,检索用户数据并检查某些条件。

现在,确实可以在同一个处理程序中同时执行这两项操作,但它们并不能很好地融合在一起。

因此,在这种情况下,框架链接多个处理程序的能力会很方便,并且可以更好地分离关注点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM