account = $account; $this->setUrlGenerator($url_generator); } /** * Redirects users when access is denied. * * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event * The event to process. */ public function onException(GetResponseForExceptionEvent $event) { $exception = $event->getException(); if ($exception instanceof AccessDeniedHttpException) { $route_name = RouteMatch::createFromRequest($event->getRequest())->getRouteName(); if ($this->account->isAuthenticated()) { switch ($route_name) { case 'user.login'; // Redirect an authenticated user to the profile page. $event->setResponse($this->redirect('entity.user.canonical', ['user' => $this->account->id()])); break; case 'user.register'; // Redirect an authenticated user to the profile form. $event->setResponse($this->redirect('entity.user.edit_form', ['user' => $this->account->id()])); break; } } elseif ($route_name === 'user.page') { $event->setResponse($this->redirect('user.login')); } } } /** * {@inheritdoc} */ public static function getSubscribedEvents() { // Use a higher priority than // \Drupal\Core\EventSubscriber\ExceptionLoggingSubscriber, because there's // no need to log the exception if we can redirect. $events[KernelEvents::EXCEPTION][] = ['onException', 75]; return $events; } }