我应该在每个视图中检查用户的授权吗?
Should I check the authorization of a user inside every view?
所以我正在 .NET Core 2.1 中开发一个 MVC 项目。
我使用来自 ASP.NET Identity 的内置 Cookie 身份验证。
我控制器中所有需要授权的端点当然都用 [Authorize]
注释。但是,我的视图(返回的)是否也需要一种注释形式来定义它们只能由获得授权的用户访问?如果是这样你会怎么做?
在我看来,在 .cshtml-View 中检查身份验证或授权与 MVC 概念相矛盾。当请求到达 MVC 的 "View" 部分时,已经有一个相应的控制器参与其中,它完成了它的工作并调用了视图引擎。此时您已经(或应该)完成业务逻辑的处理——权限只是业务需求的另一种形式——并以最美妙的方式呈现其结果。
所以具体回答你的问题:
But, do my views (that get returned) also need a form of annotation to define they are only accessible for users that are authorized?
因为它们只能通过控制器访问(或者应该是),所以它们不需要额外的注释。
视图或部分视图只能通过控制器的任何操作访问,因此如果您在控制器或操作上应用 [Authorize]
过滤器,则无需在视图中使用它。
但是如果想在视图中对用户进行身份验证,那么您可以使用身份用户的扩展方法IsInRole("Role")
。
所以我正在 .NET Core 2.1 中开发一个 MVC 项目。 我使用来自 ASP.NET Identity 的内置 Cookie 身份验证。
我控制器中所有需要授权的端点当然都用 [Authorize]
注释。但是,我的视图(返回的)是否也需要一种注释形式来定义它们只能由获得授权的用户访问?如果是这样你会怎么做?
在我看来,在 .cshtml-View 中检查身份验证或授权与 MVC 概念相矛盾。当请求到达 MVC 的 "View" 部分时,已经有一个相应的控制器参与其中,它完成了它的工作并调用了视图引擎。此时您已经(或应该)完成业务逻辑的处理——权限只是业务需求的另一种形式——并以最美妙的方式呈现其结果。
所以具体回答你的问题:
But, do my views (that get returned) also need a form of annotation to define they are only accessible for users that are authorized?
因为它们只能通过控制器访问(或者应该是),所以它们不需要额外的注释。
视图或部分视图只能通过控制器的任何操作访问,因此如果您在控制器或操作上应用 [Authorize]
过滤器,则无需在视图中使用它。
但是如果想在视图中对用户进行身份验证,那么您可以使用身份用户的扩展方法IsInRole("Role")
。