Задать вопрос

Как сделать доступность метода контроллера (mvc) для разных пользователей?

Как сделать доступность метода контроллера (mvc) для разных пользователей?

То есть человек авторизовался, определяется его тип admin или user. Админу доступны те методы контроллера которые недоступны обычному пользователю. Как бы это сделать грамотно?

Мне только думается сделать так:
1 Методы контроллера заносят данные о доступности этого метода в переменную класса.
2 В классе определен privat метод проверки данных о доступности вызываемого метода контроллера и типа пользователя. Тип пользователя в SESSION.
3 Этот privat метод вызывается в конструкторе супер-класса контроллера.
В случае если тип пользователя например user а вызывается метод админа, скрипт завершается ошибкой.

По идее, должно работать, и будет безопасно. Но что-то мне подсказывает... что это не совсем правильно. Как лучше сделать?
  • Вопрос задан
  • 2424 просмотра
Подписаться 5 Оценить Комментировать
Решение пользователя Александр Кубинцев К ответам на вопрос (3)
akubintsev
@akubintsev
Опытный backend разработчик
Одна из реализаций это создание группы объектов, отвечающих за проверку прав доступа.
Назовём его PermissionManager. В этот менеджер можно добавлять группы объектов Permission* , реализующие интерфейс с методами hasPermission($object, $user, $method) и hasPermissionToСlass($className, $user, $method), и соответствующие по названию проверяемому объекту/классу.

Первый используется для проверки доступа к существующему объекту.
Второй имеет обычно более высокий приоритет, чем первый при проверке доступа и отвечает за возможность создания объекта с указанным названием или возможностью пользователю просматривать класс в принципе, без зависимости от его содержания.

Соответственно, используя такой механизм можно обратиться к PermissionManager (его разумно в DI-контейнер помещать) из метода вашего контроллера и проверять права пользователя на то, что вам нужно.
Ответ написан
Комментировать