2016-02-14 5 views
3

Я в настоящее время использую redux и redux-thunk middleware.Redux, действия, авторизация

Когда дело доходит до контроля в отношении действий, диспетчеризацию, такие как:

  • делает пользователь имеет достаточно прав для этого действия?
  • подсказывают пользователю подтвердить свое действие (для разрушающего действия)

Я считаю, размещая такие элементы управления в асинхронном действия (санк) является путь, потому что:

  • он сохраняет мой код DRYer (), многие компоненты/виды могут запускать действие , тогда как имеется только один actionCreator для указанного действия)
  • Это последний пункт перед тем, как «что-то происходит» в приложении. Сделать это как стратегическое место для такого контроля.

вопрос (ы)

  1. Я ищу обратную связь от других пользователей Redux. Я довольно уверен в этом решении, но имея небольшую обратную связь (и будучи junior dev), я сомневаюсь. Правильно ли это подходит для авторизация контроль при использовании redux?

  2. Что о создании авторизации контроллера в промежуточного. Он сохранял бы элементы управления auth в одном месте вместо того, чтобы дублировать его в каждом actionCreator.
    Edit Когда копать глубже в эту возможность быстро стала сложной задачей, поскольку промежуточный слой первоначально получает только (dispatch, getState) это означает, что промежуточное программное разрешение будет необходимо «знать», действие которого отправка (или который используется actionCreator), то, что потребовала хак-иш-установки и в конечном итоге оказалась ненадежной.

Другие

  • Да, это на стороне клиента. Да, мы также делаем проверки на стороне сервера.
  • Я знаю, что эти типы элементов управления НЕ должны находиться в моем магазине/редукторах. Они должны быть чистыми.

ответ

2

Я думаю, что вы готовы пойти со своей установкой. Thunk - хороший способ организовать ваш программный поток. Есть и другие Middlewares, такие как редукционная сага, которая немного сложнее, но насколько я понимаю, вы хотите сделать что-то вроде этого (псевдокод)?

function authorizeAndTriggerAction(forUser) { 
    return function (dispatch) { 
    return authorizeUser().then(
     action => dispatch(concreteAction(forUser)), 
     error => dispatch(notAuthorized(forPerson, error)) 
    ); 
    }; 
} 

Это можно сделать с помощью thunk.

+0

Да, это то, что мы рекомендуем. Это или что-то вроде Redux Saga для сложных рабочих процессов. –