X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Fuser%2Fsrc%2FEventSubscriber%2FAccessDeniedSubscriber.php;fp=web%2Fcore%2Fmodules%2Fuser%2Fsrc%2FEventSubscriber%2FAccessDeniedSubscriber.php;h=6b738c8c3d3d4ed7743a884eac2ef1cc755b2b5e;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/user/src/EventSubscriber/AccessDeniedSubscriber.php b/web/core/modules/user/src/EventSubscriber/AccessDeniedSubscriber.php new file mode 100644 index 000000000..6b738c8c3 --- /dev/null +++ b/web/core/modules/user/src/EventSubscriber/AccessDeniedSubscriber.php @@ -0,0 +1,86 @@ +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; + } + +}