Проверка действий пользователя непосредственно в методе контроллера?

Коллеги, доброй ночи!

Есть практика проверки разрешений в методе контроллера?
Я об этом:

Метод в контроллере
public function delete()
{
        $this->checkPermission($this->getRole('email'), Action::DELETE);  // Проверка 
        ...
}


Я подмешал в базовый контроллер методы проверки разрешений с помощью "Trait"
Теперь во всех контроллерах появился метод checkPermission
checkPermission принимает следующие параметры

1 - Роль
2 - Действие

То есть, в методе, который хотим проверить разрешение, а можно ли текущему юзеру использовать этот метод

Если да, то не мешаем
Если нет то из трейта кидаем исключение или сразу отдаём сообщение.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
mad_maximus
@mad_maximus
Трейт тут избыточен, используйте DI. Да, в контроллере можно проверять права, так делает симфони, например.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xEpozZ
@xEpozZ
Веб-разработчик
Сделайте новые методы, чтобы облегчить себе жизнь:
public function checkDeletePermission($role) {
    $this->checkPermission($this->getRole($role), Action::DELETE);
}
public function checkReadPermission($role) {
    $this->checkPermission($this->getRole($role), Action::READ);
}
public function checkCreatePermission($role) {
    $this->checkPermission($this->getRole($role), Action::CREATE);
}


А еще можно сделать 1 метод с проверками по методам, например:
Controller:
__checkActionsPermissions
____return ['actionView' => ['role' => 'email', 'permission' => Action::VIEW]];

Далее перед вызовом ваших экшеном сначала прогоняйте этот метод через валидаторы/чекеры.
В итоге вы не будете загрязнять ваши методы лишним кодом, не относящимся к сути непосредственно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы