У меня есть проект, который включает в себя раздел admin и user . Оба раздела используют одни и те же контроллеры, только разные функции и шаблоны (например: viewAdmin()
и viewUser()
). В функции beforeRender()
каждого контроллера я устанавливаю переменную $admin
как true
для функций администратора и false
для функций пользователя.
Для аутентификации я использую Shibboleth . Shibboleth использует данные из LDAP, в то время как типы пользователей были сохранены в базе данных SQL, это означает, что, хотя он может проверять, являются ли логин и пароль ложными, он не может проверить, является ли пользователь администратором или нет. Пользователь может перейти в раздел ADMIN, если он использует право action
(например: перейти по ссылке http://example.com/tool/viewAdmin).
Чтобы предотвратить это, мне нужно будет:
- Загрузить модель
Users
- Сравните переменную среды
uid
(имя для входа) со столбцами "login" в таблице Users
в моей базе данных SQL
- См. Столбец "type" в таблице
Users
, чтобы узнать, является ли пользователь администратором.
- Сравните результат со значением
$admin
и перенаправьте на страницу ошибки при необходимости.
Проблема в том, что я не хочу повторять эти шаги для КАЖДОГО контроллера.
В настоящее время у меня есть 2 идеи:
- Напишите функцию в
UsersController
и используйте ее в каждом контроллере.
- Создайте компонент и загрузите его в каждый контроллер.
Оба метода требуют изменения кода во всех контроллерах. Я хотел бы услышать лучший способ с меньшим количеством работы, возможно, изменив app.php
или bootstrap.php
.
Любое предложение приветствуется.