【问题标题】:How can I figure out if the authenticated user is authorized to access an area/controller/action?如何确定经过身份验证的用户是否有权访问区域/控制器/操作?
【发布时间】:2019-07-15 08:03:35
【问题描述】:

在视图中并且您知道您希望用户提供链接到的目的地的区域名称、控制器名称和操作名称,我如何确定区域/控制器/操作是否是授权给经过身份验证的用户。

虚构用例:

我有一个包含书籍列表的表格(bookscontroller.index 的结果)。最右边是一些用于编辑或删除特定书籍的图标。编辑链接指向 bookscontroller.edit,删除链接指向 bookscontroller.delete。

在动作上有自定义授权属性,这很完美。如果用户想要访问 books/edit/1 并且不允许用户编辑书籍,则用户将被重定向到登录页面。

如果不允许用户编辑书籍,那么在其中有那个编辑图标有点愚蠢。因此,在视图级别,我希望能够确定是否允许用户使用 bookcontroller 的编辑操作。如果是,则显示图标,如果不是,则不显示操作。

目标:利用这些知识创建自定义标签助手。

【问题讨论】:

    标签: authorization asp.net-core-2.2 asp.net-core-tag-helpers


    【解决方案1】:

    go-to 方法是反应式的,即当用户尝试执行操作时,您会检查用户是否可以执行操作。既然你不想那样做,这就是方法。 (然而,这是反模式)

    将用户的身份验证令牌发送回后端。对于用户可以点击的页面上的每个按钮,后端都应该有一个 API 端点。使用身份验证令牌,后端决定是否使按钮变暗或启用。

    现在,后端解决此问题的方法不是很有效。后端需要从字面上尝试某些操作并中止事务。对于创建和检索,这很简单(您可以预先解决它们),但对于编辑和删除,这需要大量资源。

    【讨论】:

      【解决方案2】:

      在 UI 上控制此类操作的标准方法是使用基于角色的授权。 对于按钮或其他此类 UI 元素,设置角色标签,例如“管理员:编辑”、“查看者:只读”等。 当您对用户进行身份验证时,从后端服务器发送适用的角色,以您的 UI 可全局访问的方式存储它们,并使用它们在您的应用程序中过滤 UI 元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-14
        • 1970-01-01
        • 2017-06-05
        • 2019-06-28
        • 1970-01-01
        • 2019-12-21
        相关资源
        最近更新 更多