CakePHP: Как использовать функцию с моделью в каждом контроллере? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть проект, который включает в себя раздел admin и user . Оба раздела используют одни и те же контроллеры, только разные функции и шаблоны (например: viewAdmin() и viewUser()). В функции beforeRender() каждого контроллера я устанавливаю переменную $admin как true для функций администратора и false для функций пользователя.

Для аутентификации я использую Shibboleth . Shibboleth использует данные из LDAP, в то время как типы пользователей были сохранены в базе данных SQL, это означает, что, хотя он может проверять, являются ли логин и пароль ложными, он не может проверить, является ли пользователь администратором или нет. Пользователь может перейти в раздел ADMIN, если он использует право action (например: перейти по ссылке http://example.com/tool/viewAdmin).

Чтобы предотвратить это, мне нужно будет:

  1. Загрузить модель Users
  2. Сравните переменную среды uid (имя для входа) со столбцами "login" в таблице Users в моей базе данных SQL
  3. См. Столбец "type" в таблице Users, чтобы узнать, является ли пользователь администратором.
  4. Сравните результат со значением $admin и перенаправьте на страницу ошибки при необходимости.

Проблема в том, что я не хочу повторять эти шаги для КАЖДОГО контроллера.

В настоящее время у меня есть 2 идеи:

  1. Напишите функцию в UsersController и используйте ее в каждом контроллере.
  2. Создайте компонент и загрузите его в каждый контроллер.

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

Любое предложение приветствуется.

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Используйте официальный плагин CakePHP для аутентификации и дополните адаптер LDAP дополнительной проверкой кода, которая вам нужна.Это очень легко сделать, а также очень чистый способ решения проблемы.Отказ от ответственности: я один из авторов плагина аутентификации.https://github.com/cakephp/authentication

Или, если вы хотите оставаться независимым от какой-либо платформы, используйте мою библиотеку, основанную на плагине аутентификации, которая была отделена от любой платформы, но все еще прекрасно работает с Cake https://github.com/Phauthentic/authentication.

0 голосов
/ 26 июня 2019

Чтобы поделиться методами в контроллерах CakePHP, вы можете сделать:

  1. Создание компонента и включение в контроллер
  2. Или создайте метод в AppController и используйте его в дочерних контроллерах
  3. Или PHP способ создания черты.

Но когда вы авторизуете пользователей, все пользовательские данные сохраняются в сессии, в т.ч. это роли пользователя (например, администратор, обычный, член, ..)

...