Привилегии пользователя JS (Angular) Front-End с PHP + MySQL Back-End

В настоящее время я создаю сложный внешний веб-сайт на основе AngularJS. Бэкенд работает на PHP и MySQL.

У меня есть 2 вопроса, оба относительно привилегий пользователя.

  1. Как вы будете разрабатывать схему базы данных для хранения привилегий пользователя? В будущем я хочу добавить предопределенные привилегии (несколько наборов) и использовать их как типы бесплатных/премиум-аккаунтов.

  2. Как вы будете управлять этими привилегиями во внешнем интерфейсе? Когда вы получите/повторно получите привилегии? Как вы будете проверять их на каждом методе, который требует привилегий?

Я ищу умное решение, которое не будет ограничивать меня в количестве привилегий, которые я могу определить, но также предоставит набор основных привилегий по умолчанию, если ничего не определено.

О реализации SQL
Права должны применяться ко всем пользователям в определенной компании.
схема БД примерно такая:

  • компании (company_id и т. д.)
  • пользователи (user_id, company_id и т. д.)

Насколько я понимаю, схема привилегий должна выглядеть так:

  • привилегии (prev_id, prev_name)
  • компании_привилегии (идентификатор_компании, предыдущий_идентификатор)

Обработка привилегий пользователя
когда пользователь входит в систему, привилегии компании сохраняются с помощью службы cookie/сеанса/внешнего интерфейса.

Для проверки на внешнем конце я использую директиву, которая сравнивает текущие привилегии пользователя с требуемой привилегией:

требуется привилегия данных = 1 пользователь = 1

Что касается серверной части, то в настоящее время я отправляю пользовательский токен с каждым запросом на сервер. Этот токен проверяется по базе данных. Я могу использовать это, чтобы получить пользовательские привилегии и сохранить их, а затем проверить, может ли пользователь получить доступ/использовать определенную функцию.

Помимо добавления привилегий true/false, мне нужна поддержка числовых привилегий,
например: ограничение количества отображаемых элементов в определенном списке.

Я правильно думаю? Я что-то упускаю?

Требования
 – Неограниченные привилегии для каждой компании
 – Привилегии по умолчанию должны применяться ко всем компаниям


person Orz    schedule 03.11.2013    source источник
comment
У нас нет информации, которая помогла бы нам ответить на 2 вопроса.   -  person Telshin    schedule 03.11.2013
comment
извините за это, я нажал отправить по ошибке.   -  person Orz    schedule 03.11.2013
comment
многочисленные угловые директивы auth на github .... посмотрите, как они настроены, должно помочь. Проверьте также этот каталог ngmodules.org   -  person charlietfl    schedule 03.11.2013
comment
Не могли бы вы уточнить, что это за разрешения? Варианты использования и особенности могут быть здесь действительно ценными. Какую проблему ты пытаешься решить?   -  person Benjamin Gruenbaum    schedule 03.11.2013


Ответы (2)


Быстрый ответ:

  1. Я разработал и реализовал сложный механизм привилегий, основанный на ролях, глагол-объект и наследование. Он был достаточно мощным и послужил основой для множества функций всей системы. Разница между бесплатными и премиальными пользователями была одним из требований, и она была полностью покрыта. Так что это направление, в котором вы можете следовать. Само собой разумеется, что это серверная логика.

  2. В то время не было Angular, но обычно в Angular лучше всего делать следующее: A. Иметь службу, которая в основном предоставляет один вызов: isAuthorized(имя-привилегии). B. Иметь директиву ("needPrivilege='привилегия-имя'"), которая использует эту службу и показывать/скрывать/отключать в соответствии с ее логическим результатом. Само собой разумеется, что она использует isAuthorized. C. Добавьте логику в маршрутизацию, которая также использует эту службу для ограничения доступа к страницам в пользовательском интерфейсе.

Это мои два цента...

person Avi Tshuva    schedule 03.11.2013

Лучшее решение, которое мы в GoDisco нашли правильным для реализации, на самом деле очень простое.

На стороне сервера: 1. Мы создаем RESTful API 2. Этот RESTful API всегда запрашивает access_key как простую реализацию OAuth 3. В каждом запросе мы проверяем, иметь права доступа к этим данным, иначе он вернет ему «401 ACCESS DENIED»

Сторона AngularJS:

  1. Создаем модуль "Сервис авторизации"
  2. Когда пользователь вошел в систему, мы кэшировали в системе его роли.
  3. Router checking
    1. This service is listen to the $route and the $location services
    2. При каждом запросе на маршрут наша служба проверяет, есть ли у текущего зарегистрированного пользователя правильные роли для запрошенного маршрута. мы просто определяем разрешенные роли в конфигурации маршрута.
    3. Если пользователь запросил недопустимый маршрут, мы выдаем ему ошибку, изменив его маршрут на наш ошибочный маршрут.
  4. Rest catch
    1. We chose to use Restangular module to handle our RESTful requests
    2. С помощью Restangular мы можем ловить ошибки, используя запросы как promise. Если у нас есть какая-либо ошибка 401, мы ее обрабатываем.
person Almog Baku    schedule 03.11.2013