From b6ac9fb362d59a59f24e1508c1f1ed6788644718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Thu, 24 Apr 2025 20:58:16 +0200 Subject: [PATCH] feat: access denied handler --- src/EventListener/AccessDeniedListener.php | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/EventListener/AccessDeniedListener.php diff --git a/src/EventListener/AccessDeniedListener.php b/src/EventListener/AccessDeniedListener.php new file mode 100644 index 0000000..f4059a6 --- /dev/null +++ b/src/EventListener/AccessDeniedListener.php @@ -0,0 +1,55 @@ +getThrowable(); + + if (false === $exception instanceof AccessDeniedException) { + return; + } + + $request = $event->getRequest(); + $route = $request->attributes->get('_route'); + + // Treat OAuth2 routes differently + if (in_array($route, ['oauth2_authorize', 'oauth2_token'])) { + $request->getSession()->getFlashBag()->add('info', 'Bitte melde dich an.'); + + $this->logger->info('OAuth2 authorization request', [ + 'uri' => $request->getRequestUri(), + ]); + + return; + } + + if (null === $this->security->getUser()) { + $request->getSession()->getFlashBag()->add('info', 'Bitte melde dich an.'); + } else { + $request->getSession()->getFlashBag()->add('error', 'Zugriff verweigert'); + // Unset potentially set target path to avoid access denied errors + $request->getSession()->remove('_security.main.target_path'); + } + + $this->logger->warning('Access denied', [ + 'uri' => $request->getRequestUri(), + ]); + } +}