处理redux中的权限

Eoi*_*oin 11 authentication permissions node.js redux

使用node-redux堆栈.我们在客户端有动作创建者,后端有reducers + redux状态.我有以下提议来实现权限:

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


问题:

每种操作类型都与一组权限相关联,这意味着我们需要非常小心地创建我们的reducer,以便我们永远不会允许操作执行超出应有的操作.由于团队中有多个开发人员和一个大型应用程序,我不相信这就足够了.

问题:

  • 是否有一个很好的资源/链接与关于使用redux处理权限的良好讨论.
  • redux是否足以处理复杂的权限?
  • 如果我们检查上面列出的权限是否有任何我没有提到的问题,是否有更好的方法来处理这个仍然使用redux?
  • Kye*_*ica 5

    Redux是"许可不可知".Redux只是一个用于协调更新应用程序状态的操作的框架; 它没有关于如何处理允许这些行动的意见或建议.

    答案

    是否有一个很好的资源/链接与关于使用redux处理权限的良好讨论.

    这是一个.

    授权是一个非常难以做出一般性的宣言,因为它在很大程度上取决于业务需求.你在使用角色吗?你只需要认证吗?用户可以拥有多个角色,还是只有一个?多个角色如何互动?这些不是一个答案的问题.

    redux是否足以处理复杂的权限?

    这就像询问JavaScript是否足以处理复杂的权限一样.它没有多大意义.

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

    另一方面,redux提供了一种开箱即用的机制,可以处理复杂的权限而无需任何其他模式或工具:不.Redux甚至没有尝试解决这个问题,这完全取决于你.

    如果我们检查上面列出的权限是否有任何我没有提到的问题,是否有更好的方法来处理这个仍然使用redux?

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

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

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

    但是,鉴于您所拥有的信息,并假设执行检查服务器端既有必要又节省时间(另一个很大的假设),我会说(尽可能弱)是的,还会有其他问题.仅举几例:

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

    客户端应用程序的一大胜利是服务器只完成它绝对必须完成的工作:提供数据(以json等最小格式),并验证更新数据的请求.您将承担运行所有客户的额外工作.这是减少编写REST api的样板的可疑权衡.

    这也会锁定你的动作api和redux.REST api具有与客户端无关的优点.如果您从redux更改,或者只是重新组织您的操作,服务器上的REST api将不需要更改(或者至少不需要更改).这将使重构,即使你坚持使用redux,痛苦.这是否克服了编写REST API的痛苦是不可能的,但它需要考虑的事情.