我目前正在使用redux和redux-thunk中间件。
当涉及到有关操作调度的控制时,例如:
- 用户是否具有执行此操作的足够权限?
- 提示用户确认其操作(用于破坏性操作(
我相信将此类控件放在异步操作(thunk(中是要走的路,因为:
- 它使我的代码保持干燥(许多组件/视图可能会触发动作,而所述动作只有一个动作创造者(
- 这是应用程序中"发生某些事情"之前的最后一点。 让它感觉像是进行此类控制的战略场所。
问题
-
我正在寻找其他 redux 用户的反馈。我是公平的对这个决定充满信心,但几乎没有反馈(并且初级开发人员(让我怀疑。这是正确的方式吗使用 Redux 时的授权控制?
-
如何将授权控制器变成中间件。它将身份验证控件保存在一个地方,而不是在每个 actionCreator 中复制它。
编辑当深入研究这种可能性时,它很快就变得具有挑战性,因为中间件最初只接收(dispatch, getState)
这意味着授权中间件需要"知道"正在调度哪个操作(或正在使用哪个 actionCreator(,这需要黑客式设置,最终被证明是不可靠的。
其他要点
- 是的,这是客户端。是的,我们还进行服务器端检查。
- 我知道这些类型的控件不应该在我的商店/减速器中。他们需要是纯洁的。
我认为您可以进行设置。Thunk 是编排程序流的好方法。还有其他中间件,如 redux-saga,它有点复杂,但据我所知,你想做这样的事情(伪代码(?
function authorizeAndTriggerAction(forUser) {
return function (dispatch) {
return authorizeUser().then(
action => dispatch(concreteAction(forUser)),
error => dispatch(notAuthorized(forPerson, error))
);
};
}
这可以通过 thunk 来完成。