多个 AuthorizationHandlers 与具有 Switch/If 语句的单个 AuthorizationHandler
Multiple AuthorizationHandlers vs. Single AuthorizationHandler with Switch/If Statements
我已经成功实施了 policy-based authorization in ASP.NET Core 2.2. I believe I understand the concept of how AuthorizationHandlers can perform requirement checks on an OR-basis。
但是除非我遗漏了什么,否则不能在单个处理程序中完成相同的 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;
}
}
我是否遗漏了需要使用多个处理程序的场景?
如果您要定义所有相关的实现,不,您可以使用单个处理程序。
事实上,无论您的要求是什么,您都可以开发一个完全适合您需要的自定义处理程序。
如果您认为一个示例可能具有完全不同的授权实现,那么这些示例会更有趣。喜欢:
- 完全基于 cookie,通过复杂的 JWT 令牌。
- 基于数据库,检索用户数据并检查某些条件。
现在,您确实可以在同一个处理程序中执行这两项操作,但它们并没有真正融合得很好。
因此,在这种情况下,框架 link 多个处理程序的能力会很方便,并且可以更好地分离关注点。
我已经成功实施了 policy-based authorization in ASP.NET Core 2.2. I believe I understand the concept of how AuthorizationHandlers can perform requirement checks on an OR-basis。
但是除非我遗漏了什么,否则不能在单个处理程序中完成相同的 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;
}
}
我是否遗漏了需要使用多个处理程序的场景?
如果您要定义所有相关的实现,不,您可以使用单个处理程序。
事实上,无论您的要求是什么,您都可以开发一个完全适合您需要的自定义处理程序。
如果您认为一个示例可能具有完全不同的授权实现,那么这些示例会更有趣。喜欢:
- 完全基于 cookie,通过复杂的 JWT 令牌。
- 基于数据库,检索用户数据并检查某些条件。
现在,您确实可以在同一个处理程序中执行这两项操作,但它们并没有真正融合得很好。
因此,在这种情况下,框架 link 多个处理程序的能力会很方便,并且可以更好地分离关注点。