diff --git a/src/EventListener/AccessDeniedListener.php b/src/EventListener/AccessDeniedListener.php new file mode 100644 index 0000000..36e9bd5 --- /dev/null +++ b/src/EventListener/AccessDeniedListener.php @@ -0,0 +1,48 @@ +getThrowable(); + if (false === $exception instanceof AccessDeniedException) { + return; + } + + $request = $event->getRequest(); + + if ($request->isXmlHttpRequest()) { + return; + } + + $request->getSession()->getFlashBag()->add('error', 'Zugriff verweigert'); + + $this->logger->warning('Access denied', [ + 'uri' => $request->getRequestUri(), + ]); + + $user = $this->security->getUser(); + $redirectRoute = $user ? $user->getDefaultRoute() : 'app_login'; + + $event->setResponse(new RedirectResponse($this->urlGenerator->generate($redirectRoute))); + } +}