Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2016, 22:33
Новичок на форуме
Отправить личное сообщение для hound Посмотреть профиль Найти все сообщения от hound
 
Регистрация: 18.11.2016
Сообщений: 5

React и контент в зависимости от типа пользователя
Добрый день, начал изучать react+redux, появился такой вопрос:
Есть некий сайт в котором может быть несколько типов пользователей (админ, менеджер и т.п) и в зависимости от типа авторизованного пользователя ему должны быть доступны разные элементы в интерфейсе.
Если с выдачей информации по API довольно просто - на сервере проверяем тип пользователя и если он не тот который нужен, то шлем ошибку. А вот как быть, если например у нас есть компонент со статьей и если тип юзера - админ, то будет доступна кнопка "удалить", а если менеджер то нет?
Хранить тип юзера в сторе редакса? не вариант, можно ее поменять через консоль - дыра.
До рендера этого компонента делать запрос на сервер с текущими куками и получать типа пользователя и уже после получения ответа рендерить компонент?
Сервер на Django, но думаю, что особой разницы какой бэк использовать тут нет.
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2016, 08:41
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Дыра будет вне зависимости от того, что у вас там на клиенте будет. Для проверки полномочий юзера используются токены на сервере. Грубо говоря, если у вас даже не будет пресловутой кнопки удалить, что мешает злоумышленнику просто сделать запрос на удаление из консоли. Реакт - это не универсальное средство, он нужен для облегчения построения интерфейса, а не непробиваемой защиты

Последний раз редактировалось Царь Леонид, 19.11.2016 в 08:44.
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2016, 12:31
Новичок на форуме
Отправить личное сообщение для hound Посмотреть профиль Найти все сообщения от hound
 
Регистрация: 18.11.2016
Сообщений: 5

Сообщение от Царь Леонид Посмотреть сообщение
Дыра будет вне зависимости от того, что у вас там на клиенте будет. Для проверки полномочий юзера используются токены на сервере. Грубо говоря, если у вас даже не будет пресловутой кнопки удалить, что мешает злоумышленнику просто сделать запрос на удаление из консоли. Реакт - это не универсальное средство, он нужен для облегчения построения интерфейса, а не непробиваемой защиты
Это понятно, поэтому на сервере тоже будет проверка производиться а любом случае. В данном случае вопрос про отображение. На сколько правильный будет способ - до рендера компонента, скажем в методе componentDidMount делать запрос на сервер о том, что выводить эту кнопку или нет?
Ответить с цитированием
  #4 (permalink)  
Старый 19.11.2016, 14:13
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 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
Ответить с цитированием
  #5 (permalink)  
Старый 19.11.2016, 15:57
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Сообщение от hound Посмотреть сообщение
Это понятно, поэтому на сервере тоже будет проверка производиться а любом случае. В данном случае вопрос про отображение. На сколько правильный будет способ - до рендера компонента, скажем в методе componentDidMount делать запрос на сервер о том, что выводить эту кнопку или нет?
Роль пользователя надо хранить в глобальном store и уже в зависимости от этого выводить кнопку или нет. В этом же вся соль редакса
Ответить с цитированием
  #6 (permalink)  
Старый 19.11.2016, 16:09
Новичок на форуме
Отправить личное сообщение для hound Посмотреть профиль Найти все сообщения от hound
 
Регистрация: 18.11.2016
Сообщений: 5

Сообщение от Царь Леонид Посмотреть сообщение
Роль пользователя надо хранить в глобальном store и уже в зависимости от этого выводить кнопку или нет. В этом же вся соль редакса
Да, но это значение можно поменять. Хотя, в любом случае проверка на сервере есть.
Ответить с цитированием
  #7 (permalink)  
Старый 19.11.2016, 16:09
Новичок на форуме
Отправить личное сообщение для hound Посмотреть профиль Найти все сообщения от hound
 
Регистрация: 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
спасибо, покурю маны
Ответить с цитированием
  #8 (permalink)  
Старый 19.11.2016, 16:55
Новичок на форуме
Отправить личное сообщение для hound Посмотреть профиль Найти все сообщения от hound
 
Регистрация: 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? По личному опыту.
Ответить с цитированием
  #9 (permalink)  
Старый 19.11.2016, 21:03
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
А в чем именно преимущество JWT перед session? По личному опыту.
В том, что это SPA. Сервер просто предоставляет какое-то апи, которое может использоваться на разных клиентах (браузер, мобильное устройство и т.д.). Апи -- stateless, оно нигде не хранит состояние, БД не выступает в роли хранилища сессий юзера. Токены хранятся на клиенте.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
background resize IceDvl jQuery 4 25.04.2014 17:54
Перенаправление пользователя в зависимости от данных в SQl mozgs Работа 3 04.04.2014 21:07
Как вернуть контент на нужном языке в зависимости от того, что за фрукт зашел на сайт Shitbox2 Общие вопросы Javascript 11 10.03.2013 12:50
Перемещение блока при скроллинге region029 Общие вопросы Javascript 10 16.06.2012 10:41
Генерация JavaScript в зависимости от прав пользователя iDeadRat Серверные языки и технологии 24 27.04.2009 15:42