使用 node-redux 堆栈。我们在客户端有 action creators,在后端有 reducers + redux state。 我有以下实现权限的建议:
- 操作是在客户端创建的,即使是经过身份验证的用户,这些操作也可能是恶意的。
- Action 被发送到服务器。
- 请求在服务器端进行身份验证,并确定用户权限。
- 这些操作通过位于 Node 服务器内部的 redux 中间件。
- 中间件根据为操作类型指定的权限检查用户权限。
- 如果用户对操作具有正确的权限,那么 reducer 会创建一个新的 redux 状态(它也存在于服务器上)。
问题:
每个 Action 类型都与一组权限相关联,这意味着我们需要非常小心地创建我们的 reducer,这样我们就不会允许 Action 做超出其应有的事情。由于团队中有多个开发人员和一个大型应用程序,我不相信这已经足够了。
问题:
最佳答案
Redux 是“权限无关的”。 Redux 只是一个用于协调更新应用程序状态的 Action 的框架;它不包含关于如何处理允许这些行为的意见或建议。
答案
Is there a good resource/link with a good discussion on handling permissions with redux.
授权是一件很难做出一般性声明的事情,因为它在很大程度上取决于业务需求。你在使用角色吗?您只需要身份验证吗?用户可以有多个角色,还是只有一个?多个角色如何交互?这些不是只有一个答案的问题。
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/