在redux中处理权限

使用节点 – 还原堆栈。 我们在客户端有动作创build者,后端有reducer + redux状态。 我有以下build议来实现权限:

  1. 操作被创build在客户端,这些可能是恶意的,甚至是来自被authentication的用户。
  2. 操作被发送到服务器。
  3. 该请求是经过身份validation的服务器端和用户权限确定的。
  4. 这些动作通过位于节点服务器内部的redux中间件。
  5. 中间件根据为操作types指定的权限检查用户权限。
  6. 如果用户具有正确的操作权限,那么reducer将创build一个新的redux状态(它也驻留在服务器上)。

问题:

每个动作types都与一组权限相关联,这意味着我们需要非常小心地创build我们的reducer,这样我们就不会允许某个动作超出应有的范围。 有了多个开发团队和一个大型应用程序,我不相信这是足够的。

问题:

  • 有没有一个很好的资源/链接与处理与redux的权限很好的讨论。
  • 是否足够处理复杂的权限?
  • 如果我们检查权限,如上所述是否有任何我没有提到的问题,有没有更好的方法来处理这个问题,同时仍然使用REDX?
  • Redux是“权限不可知的”。 Redux只是协调更新应用程序状态的操作的框架; 它不包含有关如何处理许可这些行为的意见或build议。

    答案

    有没有一个很好的资源/链接与处理与redux的权限很好的讨论。

    这是一个 。

    授权是一个非常困难的事情,因为它非常依赖于业务需求。 你在使用angular色吗? 你只是要求authentication? 用户可以有多个angular色,或者只有一个? 多个angular色如何相互作用? 这不是一个答案的问题。

    是否足够处理复杂的权限?

    这就好比问JavaScript是否足以处理复杂的权限。 这没有什么意义。

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

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

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

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

    有没有更好的办法? “更好”就像你所能得到的一样模糊。 什么是“更好”的参数? 在开发速度和运行时间性能之间进行权衡,您更喜欢哪种? 在多个服务器调用和权限粒度之间进行权衡,您更喜欢哪个?

    您所说的只是您正在检查服务器上的操作。 不知道你的授权模式是什么,不可能说是否存在更好的方法,甚至当你精确定义“更好”,因为我们不知道你在做什么。

    但是,考虑到你所拥有的信息,并假设做检查服务器端是必要的和省时的(另一个大的假设),我会说(尽可能弱) 是的 ,会有额外的问题。 仅举几例:

    • 延迟 。 Redux预计整个应用程序状态,包括input字段的值。 您的模型会在每个操作中检查服务器,因此以严格的reduce方式进行开发,每次按键都将到达服务器,以确保允许更新input。 这会使用户交互非常缓慢,而且非常令人沮丧。
    • 带宽 。 由于上述原因,这将消耗大量的带宽。
    • CPU 。 由于上述原因,这将是非常耗时的服务器CPU。

    客户端应用程序的一大胜利是服务器只完成它的工作:提供数据(像json这样的最小格式),并validation更新数据的请求。 您将承担运行所有客户的额外工作。 这是一个值得商榷的问题,以减less编写REST API的锅炉板。

    这也将locking你的行动api,并减less。 REST API具有客户端不可知的优点。 如果你从redux改变,或者只是重新组织你的行动,服务器上的REST api将不需要改变(或者至less不需要改变)。 这将会使得重构,即使你坚持使用redux,也是痛苦的。 这是否克服了写一个REST api的痛苦是不可能说的,但它的东西要考虑。