Безопасность Symfony — узнайте подробности об отказе в доступе

Если у меня есть метод контроллера, защищенный, скажем, is_granted('ROLE_XYZ'), а у пользователя нет этой роли, как мне получить «ROLE_XYZ» в исключении? В настоящее время сообщение об исключении просто имеет «Отказано в доступе».

Или, вообще, я хочу знать, какое выражение не удалось.


person Chinmay    schedule 24.01.2019    source источник
comment
Я не пробовал это сам, но исключение AccessDenied создается в методе ControllerTrait::denyAccessUnlessGranted. Вы должны иметь возможность переопределить метод и настроить сообщение.   -  person Cerad    schedule 24.01.2019


Ответы (1)


Хм, я не уверен, что правильно понял ваш вопрос.

Но если вы хотите создать собственное исключение отказа в доступе с собственным сообщением, загляните на эту страницу: https://symfony.com/doc/current/security/access_denied_handler.html

Надеюсь, поможет

EDIT: если предыдущая ссылка не работает, для создания пользовательского сообщения необходимо:

  • Создайте класс, реализующий AccessDeniedHandlerInterface.
class AccessDeniedHandler implements AccessDeniedHandlerInterface
    {
        public function handle(Request $request, AccessDeniedException $accessDeniedException)
        {
            // ...

            return new Response($content, 403);
        }
    }
  • Затем измените файл security.yaml, чтобы добавить свой собственный класс.
    # config/packages/security.yaml
    firewalls:
        # ...

        main:
            # ...
            access_denied_handler: App\Security\AccessDeniedHandler
person Alexis    schedule 24.01.2019
comment
1) Если вы не уверены, не публикуйте ответ. 2) Ответ только по ссылке становится бесполезным, если ссылка изменилась или недоступна. - person J-Alex; 24.01.2019
comment
Хорошо, извините, я не хотел публиковать такой ответ, но я не могу сделать простой комментарий, потому что у меня недостаточно очков репутации ... Я приму ваш совет. Спасибо - person Alexis; 24.01.2019