node.js - 在 redux 中处理权限

标签 node.js authentication permissions redux

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

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


问题:

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

问题:

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

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

    答案

    Is there a good resource/link with a good discussion on handling permissions with redux.

    Here is one .

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

    Is redux sufficient for handling complex permissions?

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

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

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

    If we check permissions as outlined above are there any problems that I have not mentioned and is there a better way of approaching this while still using redux?

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

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

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

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

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

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

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

    关于node.js - 在 redux 中处理权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35627687/

    相关文章:

    javascript - 如何从 JSON 文件目录向 mongoDB 添加许多记录?

    javascript - AngularJS 不显示 ng-repeat,只显示一个空列表

    php - REST API 认证 : how to prevent man-in-the-middle replays?

    java - Facebook 登录 加载用户资料

    javascript - 如何在 graphql 解析器中实现守卫

    node.js - 设置 SharePoint 框架开发环境时出现错误 "Your yo version is outdated"

    php - 添加 SSL 证书后登录表单不起作用

    hadoop - 当我设置 Hadoop 时,*底层* 文件系统需要哪些权限?

    java - Docker Jetty 应用程序无权在已安装的卷上写入

    android - 缺少蓝牙权限 - 但我的应用没有使用它