Найдите, пытается ли запрос получить доступ к защищенной странице в Symfony

Я пытаюсь создать EventListener в Symfony, который прослушивает главный запрос, и если запрос пытается получить доступ к маршруту за брандмауэром, чтобы установить флаг в сеансе. Например. если запрос направлен к брандмауэру / администратору, то EventListener должен создать флаг в сессия. Единственный способ, который я могу придумать, - это ввести пользователя и AccessDecisionManager и проверить, имеет ли пользователь доступ к странице, когда роль установлена ​​на IS_AUTHENTICATED_ANONYMOUSLY, и проверить, полностью ли аутентифицирован пользователь. Что-то похожее:

if (!$uthorizationChecker->isGranted('IS_AUTHENTICATED_ANONYMOUSLY') && is  $authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
        // the user can't access the resources when ANONYMOUS
       // this must be a secured resource
    }

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
48
1

Ответы 1

https://symfony.com/doc/current/security.html

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

Да, я думал об этом, но мне было интересно, есть ли другой способ, поскольку я не хочу загрязнять все контроллеры какой-либо логикой (задача действительно неактуальна и не будет оправдана). Таким образом, я ищу решение на глобальном уровне. Возможно, прослушивание событий, запускаемых компонентом безопасности? Что-то, что говорит мне: "Хорошо, я только что отрисовал защищенную страницу за брандмауэром"

Kik Minev 13.04.2018 08:30

Вы пишете свой собственный аутентификатор, используете acl, чтобы убедиться, что страницы, соответствующие подстановочному знаку, будут использовать ваш собственный аутентификатор, и помещаете туда общий код, поэтому вы делаете это только один раз symfony.com/doc/current/security/…

Eric Yang 13.04.2018 15:35

Другие вопросы по теме