为什么在 ASP.NET Core 中我们需要 OperationAuthorizationRequirement 来进行基于资源的授权?

zor*_*ran 7 c# asp.net-core

我正在 learn.microsoft.com 上阅读ASP.NET Core 中的基于资源的授权,我对检查文档作者所需的复杂性感到困惑。

在此示例中,我们需要创建OperationsDocumentAuthorizationCrudHandler类,在Startup中注册 DI ,调用并等待AuthorizeAsync,然后执行检查。

我们无需在 4 个文件中编写 30 行代码,只需一行代码即可完成所有操作

if (User.Identity?.Name == Document.Author) return Page();
Run Code Online (Sandbox Code Playgroud)

如果我们希望能够重用它,我们可以将其提取到一个方法中,但这仍然是一个简单得多的解决方案。

一线解决方案有什么问题或者我遗漏了什么吗?

编辑:

为了澄清我的问题 - 有没有具体的例子为什么最好实现 AuthorizationHandler 和 OperationAuthorizationRequirement 来进行资源授权而不是进行简单的检查?我真的很好奇有什么好处,因为我更喜欢简单的解决方案,但我担心将来会遇到 AuthorizationHandler/OperationAuthorizationRequirement 已经涵盖的某些情况。

Rya*_*yan 2

正如文档所说,OperationsDocumentAuthorizationCrudHandler使您能够为每种操作类型编写单个处理程序而不是单独的类。

如果我们希望能够重用它,我们可以将其提取到一个方法中,但这仍然是一个简单得多的解决方案。

推荐的基于资源的授权使用DI,这样可以更清晰、更强大,而不是到处重复if/else代码。

此外,我们还可以在自定义授权处理程序中处理不同的状态代码(401,403...)。我们可以IAuthorizationService在视图或 blazor razor 组件中使用。

  • 谢谢您的回答。实际上,微软网站上的示例到处都是重复的 if/else 代码。如果不是这种情况,那么我可以使用 AuthorizationHandler 。此外,示例中的整个 Operations 类看起来像是一些模仿 Enum 的黑客...... (2认同)