【问题标题】:Handling permission in redux在 redux 中处理权限
【发布时间】:2016-02-25 12:44:12
【问题描述】:

使用 node-redux 堆栈。我们在客户端有 action creators,在后端有 reducers + redux state。 我有以下实现权限的建议:

  1. 操作是在客户端创建的,即使是经过身份验证的用户,这些操作也可能是恶意的。
  2. 动作被发送到服务器。
  3. 请求在服务器端进行身份验证,并确定用户权限。
  4. 这些操作通过位于节点服务器内部的 redux 中间件。
  5. 中间件根据为操作类型指定的权限检查用户权限。
  6. 如果用户对操作具有正确的权限,那么 reducer 会创建一个新的 redux 状态(它也存在于服务器上)。


问题:

每个动作类型都与一组权限相关联,这意味着我们需要非常小心地创建我们的 reducer,这样我们就不会允许动作做超出其应有的事情。由于团队中有多个开发人员和一个大型应用程序,我不相信这已经足够了。

问题:

  • 是否有一个很好的资源/链接,可以很好地讨论使用 redux 处理权限。
  • redux 是否足以处理复杂的权限?
  • 如果我们按上述方式检查权限,是否存在我没​​有提到的问题,是否有更好的方法在仍然使用 redux 的同时解决这个问题?
  • 【问题讨论】:

    • 您希望通过在服务器上保留操作和状态来保护什么,而不是仅仅保护服务器公开的任何 REST 端点?
    • 服务器上使用的减速器将是我们客户端应用程序当前使用的减速器。以这种方式做事意味着我们构建的前端 reducer 足以在服务器端持久化状态。选项二是为我们的操作创建一个休息 api。这会减慢我们的速度,并意味着我们定义的每个操作都有更多样板。

    标签: node.js authentication permissions redux


    【解决方案1】:

    Redux 是“权限无关的”。 Redux 只是一个用于协调更新应用程序状态的动作的框架;它不包含关于如何处理允许这些行为的意见或建议。

    答案

    是否有一个很好的资源/链接,可以很好地讨论如何处理权限 还原。

    Here is one.

    授权是一件很难做出一般性声明的事情,因为它在很大程度上取决于业务需求。你在使用角色吗?您只需要身份验证吗?用户可以有多个角色,还是只有一个?多个角色如何交互?这些不是只有一个答案的问题。

    redux 足以处理复杂的权限吗?

    这就像询问 JavaScript 是否足以处理复杂的权限。这真的没有意义。

    从一个角度来看,处理复杂权限是否“可能”:是的。 Redux 不会限制您希望在操作级别实现的任何权限方案,因为操作只是调用调度的函数(另一个函数)。您可以出于任何原因使用操作来停止调度调用。

    从另一个角度来看,redux 是否提供了一种开箱即用的机制,无需任何额外的模式或工具即可处理复杂的权限:不。 Redux 甚至不会尝试解决这个问题,这完全取决于您。

    如果我们如上所述检查权限,是否有我没有提到的任何问题,是否有更好的方法在仍然使用 redux 的同时解决这个问题?

    肯定有你没有提到的问题,因为你还没有完全概述你的实现。正如他们所说,魔鬼在细节中。 如何你完成你所描述的将决定你遇到的其他问题。

    有没有更好的方法? “更好”是尽可能模糊的。 “更好”的参数是什么?在开发速度和运行时性能之间进行权衡,您更喜欢哪一个?在服务器调用次数和权限粒度之间进行权衡,您更喜欢哪一种?

    您所说的只是您正在检查服务器上的操作。在不知道您的授权模型是什么的情况下,即使您精确定义“更好”,也无法说是否存在更好的方法,因为我们不知道您在做什么。

    但是,鉴于您掌握的信息,并假设检查服务器端既必要又省时(另一个大假设),我会说(尽可能弱)是的,会有额外的问题。仅举几例:

    • 延迟。 Redux 需要整个应用程序状态,包括输入字段的值。您的模型会检查服务器的每个操作,因此以严格的 redux 方式进行开发,每次击键都将转到服务器,以确保允许它更新输入。这将使用户交互变得非常缓慢,并且非常令人沮丧。
    • 带宽。由于上述原因,这将消耗大量带宽。
    • CPU。由于上述原因,这将占用大量服务器 CPU。

    客户端应用程序的一大优势是服务器只做它绝对必须做的工作:提供数据(以像 json 这样的最小格式),以及验证更新数据的请求。您将承担运行所有客户的额外工作。减少编写 REST api 的样板文件是一个值得商榷的折衷方案。

    这也会将您锁定在您的操作 api 和 redux 中。 REST api 具有与客户端无关的优势。如果您从 redux 更改,或者只是重新组织您的操作,则服务器上的 REST api 不需要更改(或者至少不需要更改那么多)。即使您坚持使用 redux,这也会使重构变得痛苦。这是否克服了编写 REST api 的痛苦很难说,但这是值得考虑的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-09
      • 2016-08-09
      • 2015-04-21
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      相关资源
      最近更新 更多