18.11.2016, 22:33
|
Новичок на форуме
|
|
Регистрация: 18.11.2016
Сообщений: 5
|
|
React и контент в зависимости от типа пользователя
Добрый день, начал изучать react+redux, появился такой вопрос:
Есть некий сайт в котором может быть несколько типов пользователей (админ, менеджер и т.п) и в зависимости от типа авторизованного пользователя ему должны быть доступны разные элементы в интерфейсе.
Если с выдачей информации по API довольно просто - на сервере проверяем тип пользователя и если он не тот который нужен, то шлем ошибку. А вот как быть, если например у нас есть компонент со статьей и если тип юзера - админ, то будет доступна кнопка "удалить", а если менеджер то нет?
Хранить тип юзера в сторе редакса? не вариант, можно ее поменять через консоль - дыра.
До рендера этого компонента делать запрос на сервер с текущими куками и получать типа пользователя и уже после получения ответа рендерить компонент?
Сервер на Django, но думаю, что особой разницы какой бэк использовать тут нет.
|
|
19.11.2016, 08:41
|
Профессор
|
|
Регистрация: 22.08.2013
Сообщений: 217
|
|
Дыра будет вне зависимости от того, что у вас там на клиенте будет. Для проверки полномочий юзера используются токены на сервере. Грубо говоря, если у вас даже не будет пресловутой кнопки удалить, что мешает злоумышленнику просто сделать запрос на удаление из консоли. Реакт - это не универсальное средство, он нужен для облегчения построения интерфейса, а не непробиваемой защиты
Последний раз редактировалось Царь Леонид, 19.11.2016 в 08:44.
|
|
19.11.2016, 12:31
|
Новичок на форуме
|
|
Регистрация: 18.11.2016
Сообщений: 5
|
|
Сообщение от Царь Леонид
|
Дыра будет вне зависимости от того, что у вас там на клиенте будет. Для проверки полномочий юзера используются токены на сервере. Грубо говоря, если у вас даже не будет пресловутой кнопки удалить, что мешает злоумышленнику просто сделать запрос на удаление из консоли. Реакт - это не универсальное средство, он нужен для облегчения построения интерфейса, а не непробиваемой защиты
|
Это понятно, поэтому на сервере тоже будет проверка производиться а любом случае. В данном случае вопрос про отображение. На сколько правильный будет способ - до рендера компонента, скажем в методе componentDidMount делать запрос на сервер о том, что выводить эту кнопку или нет?
|
|
19.11.2016, 14:13
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
hound,
Цитата:
|
до рендера компонента, скажем в методе componentDidMount делать запрос на сервер о том, что выводить эту кнопку или нет?
|
А если таких кнопок 10? 10 запросов?
JWT токены генерируются сервером и сохраняются на клиенте в каком-нибудь хранилище: куки, localStorage, sessionStorage. При инициализации нашего приложения происходит проверка существования токена, и если он есть -- посылается запрос на сервер для проверки его валидности по секретному ключу. Желательно ещё проверять нет ли этого токена в списке запрещенных: истекает срок действия, пользователь заблокирован и т.д.. Более подробно тут https://medium.com/@rajaraodv/securi...ea0#.byuolbn66 и пример https://github.com/joshgeller/react-...t-auth-example
|
|
19.11.2016, 15:57
|
Профессор
|
|
Регистрация: 22.08.2013
Сообщений: 217
|
|
Сообщение от hound
|
Это понятно, поэтому на сервере тоже будет проверка производиться а любом случае. В данном случае вопрос про отображение. На сколько правильный будет способ - до рендера компонента, скажем в методе componentDidMount делать запрос на сервер о том, что выводить эту кнопку или нет?
|
Роль пользователя надо хранить в глобальном store и уже в зависимости от этого выводить кнопку или нет. В этом же вся соль редакса
|
|
19.11.2016, 16:09
|
Новичок на форуме
|
|
Регистрация: 18.11.2016
Сообщений: 5
|
|
Сообщение от Царь Леонид
|
Роль пользователя надо хранить в глобальном store и уже в зависимости от этого выводить кнопку или нет. В этом же вся соль редакса
|
Да, но это значение можно поменять. Хотя, в любом случае проверка на сервере есть.
|
|
19.11.2016, 16:09
|
Новичок на форуме
|
|
Регистрация: 18.11.2016
Сообщений: 5
|
|
Сообщение от destus
|
hound,
А если таких кнопок 10? 10 запросов?
JWT токены генерируются сервером и сохраняются на клиенте в каком-нибудь хранилище: куки, localStorage, sessionStorage. При инициализации нашего приложения происходит проверка существования токена, и если он есть -- посылается запрос на сервер для проверки его валидности по секретному ключу. Желательно ещё проверять нет ли этого токена в списке запрещенных: истекает срок действия, пользователь заблокирован и т.д.. Более подробно тут https://medium.com/@rajaraodv/securi...ea0#.byuolbn66 и пример https://github.com/joshgeller/react-...t-auth-example
|
спасибо, покурю маны
|
|
19.11.2016, 16:55
|
Новичок на форуме
|
|
Регистрация: 18.11.2016
Сообщений: 5
|
|
Сообщение от destus
|
hound,
А если таких кнопок 10? 10 запросов?
JWT токены генерируются сервером и сохраняются на клиенте в каком-нибудь хранилище: куки, localStorage, sessionStorage. При инициализации нашего приложения происходит проверка существования токена, и если он есть -- посылается запрос на сервер для проверки его валидности по секретному ключу. Желательно ещё проверять нет ли этого токена в списке запрещенных: истекает срок действия, пользователь заблокирован и т.д.. Более подробно тут https://medium.com/@rajaraodv/securi...ea0#.byuolbn66 и пример https://github.com/joshgeller/react-...t-auth-example
|
А в чем именно преимущество JWT перед session? По личному опыту.
|
|
19.11.2016, 21:03
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
Цитата:
|
А в чем именно преимущество JWT перед session? По личному опыту.
|
В том, что это SPA. Сервер просто предоставляет какое-то апи, которое может использоваться на разных клиентах (браузер, мобильное устройство и т.д.). Апи -- stateless, оно нигде не хранит состояние, БД не выступает в роли хранилища сессий юзера. Токены хранятся на клиенте.
|
|
|
|