Как сделать управление правами в приложениях на основе REST? - PullRequest
1 голос
/ 28 марта 2019

Итак, я знаю, насколько безопасны ресурсы в бэкэнде REST, это не проблема.У меня проблема в том, как управлять управлением пользователями / правами как в REST API, так и в клиентских приложениях / front-end?

Рассмотрим следующий пример. У меня есть порядок ресурсов и счета в моем API, и я такжеУ меня есть порядок маршрутов, счета и панель инструментов в моем приложении, написанном на angular / реагируют, для простоты мы должны назвать эти страницы.Я могу хранить права в базе данных для каждой роли / пользователя в отношении конечных точек и глаголов, но это нормально, но как мне управлять одним и тем же на внешнем интерфейсе?В этом примере возможно, что накладные, заказы и панель инструментов могут каким-то образом использовать оба ресурса, так что это не отношение один к одному, и с точки зрения пользователя кажется, что он имеет права на страницы.Как мне сохранить эти отношения?

Должен ли я хранить эти интерфейсные модули / страницы / маршруты в бэк-энде, а также сопоставлять их с конечными точками REST, однако такой подход не нарушает принцип единой ответственностиа также мешает адаптации новых клиентских приложений и масштабируемости?Если нет, то я должен кодировать конечные точки, глаголы, к которым у пользователя есть доступ, в JWT, и пусть клиентское приложение решает, что с ним делать, используя какое-то отображение между конечными точками и страницами на стороне клиента, однако в этом случае я буду увеличиватьразмер JWT, который растет в геометрической прогрессии при увеличении моих конечных точек?

В моем случае ситуация еще сложнее, потому что приложение переднего плана также отвечает за назначение прав пользователям.Думайте об этом как о механизме рабочего процесса или управлении правами, где пользователь-администратор определяет роли и дает разрешение на разные страницы (с точки зрения пользователя).

Может кто-нибудь рассказать мне лучшие практики для реализации такого рода функциональности.У меня не было такой проблемы в старые времена без отдыха и веб-приложений, таких как JSF / ASP.NET, потому что у меня есть только одно место для сохранения прав, но приложение на основе REST меняет эти правила.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Возможно, вы захотите взглянуть на государственное управление. Если вы не уверены, State Management - это серия уникальных переменных, которые хранятся в «хранилище» вашего клиентского приложения. Вы можете изменять, получать и устанавливать эти переменные во всем приложении и легко доступны из любого места. Кроме того, в вашем бэк-энде не хранится информация о состоянии или сеансе, так что RESTful!

В вашей ситуации, когда пользователь входит в систему, его права или разрешения могут входить в состав ответа JSON или через закодированный JWT (что также поможет в управлении размером вашего JWT, вам не нужно вводить все там). Права добавляются в состояние, и перед созданием компонентов вы можете проверить, есть ли у пользователя правильное разрешение, и выборочно загрузить компоненты. Вы можете сделать то же самое для вызовов функций и запросов API; нет разрешения, нет действий.

Для управления правами вы можете поддерживать это с помощью простых запросов API, и когда пользователь входит в систему, его права обновляются!

Существует несколько библиотек State Management, доступных как для React, так и для Angular. Я знаком с Redux (React) и NGRX (Angular). Есть также десятки учебных пособий там; ты не будешь хотеть!

0 голосов
/ 28 марта 2019

Лучший способ справиться с этим - создать компонент высокого порядка в реакции.

  1. После того, как пользователь войдет в систему с веб-интерфейса, вы сможете определить его роль.
  2. Вам необходимо создать отображение ролей на страницы / компоненты
  3. Используйте компонент высокого порядка для визуализации всех других компонентов, требующих авторизации.
  4. В компоненте высокого порядка естьлогика рендеринга страницы / компонента, только если пользователь авторизован или переместил его на какую-то другую пользовательскую страницу ошибки / входа в систему.

Более подробную информацию можно найти здесь: https://www.codementor.io/sahilmittal/using-higher-order-components-for-authenticated-routing-i1hcp6pc6

Надеюсь, что ответит на ваш вопрос !!

...