Skip to content
Snippets Groups Projects
Commit b8aa161c authored by catch's avatar catch
Browse files

Issue #3463607 by claudiu.cristea: AccessDeniedSubscriber should extend HttpExceptionSubscriberBase

parent d4342d70
Branches
Tags
20 merge requests!11131[10.4.x-only-DO-NOT-MERGE]: Issue ##2842525 Ajax attached to Views exposed filter form does not trigger callbacks,!9470[10.3.x-only-DO-NOT-MERGE]: #3331771 Fix file_get_contents(): Passing null to parameter,!8736Update the Documention As per the Function uses.,!8513Issue #3453786: DefaultSelection should document why values for target_bundles NULL and [] behave as they do,!3878Removed unused condition head title for views,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2062Issue #3246454: Add weekly granularity to views date sort,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #249175 passed
Pipeline: drupal

#249201

    Pipeline: drupal

    #249194

      Pipeline: drupal

      #249189

        ......@@ -2,14 +2,12 @@
        namespace Drupal\user\EventSubscriber;
        use Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase;
        use Drupal\Core\Session\AccountInterface;
        use Drupal\Core\Routing\RouteMatch;
        use Drupal\Core\Url;
        use Symfony\Component\EventDispatcher\EventSubscriberInterface;
        use Symfony\Component\HttpFoundation\RedirectResponse;
        use Symfony\Component\HttpKernel\Event\ExceptionEvent;
        use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
        use Symfony\Component\HttpKernel\KernelEvents;
        /**
        * Redirects users when access is denied.
        ......@@ -19,7 +17,7 @@
        * their profile page and from the user registration form to their profile edit
        * form.
        */
        class AccessDeniedSubscriber implements EventSubscriberInterface {
        class AccessDeniedSubscriber extends HttpExceptionSubscriberBase {
        /**
        * The current user.
        ......@@ -38,52 +36,55 @@ public function __construct(AccountInterface $account) {
        $this->account = $account;
        }
        /**
        * {@inheritdoc}
        */
        protected function getHandledFormats(): array {
        return ['html'];
        }
        /**
        * {@inheritdoc}
        */
        protected static function getPriority(): int {
        // Use a higher priority than ExceptionLoggingSubscriber, because there's
        // no need to log the exception if we can redirect.
        // @see Drupal\Core\EventSubscriber\ExceptionLoggingSubscriber
        return 75;
        }
        /**
        * Redirects users when access is denied.
        *
        * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event
        * The event to process.
        */
        public function onException(ExceptionEvent $event) {
        $exception = $event->getThrowable();
        if ($exception instanceof AccessDeniedHttpException) {
        $route_name = RouteMatch::createFromRequest($event->getRequest())->getRouteName();
        $redirect_url = NULL;
        if ($this->account->isAuthenticated()) {
        switch ($route_name) {
        case 'user.login';
        // Redirect an authenticated user to the profile page.
        $redirect_url = Url::fromRoute('entity.user.canonical', ['user' => $this->account->id()], ['absolute' => TRUE]);
        break;
        public function on403(ExceptionEvent $event): void {
        $route_name = RouteMatch::createFromRequest($event->getRequest())->getRouteName();
        $redirect_url = NULL;
        if ($this->account->isAuthenticated()) {
        switch ($route_name) {
        case 'user.login';
        // Redirect an authenticated user to the profile page.
        $redirect_url = Url::fromRoute('entity.user.canonical', ['user' => $this->account->id()], ['absolute' => TRUE]);
        break;
        case 'user.register';
        // Redirect an authenticated user to the profile form.
        $redirect_url = Url::fromRoute('entity.user.edit_form', ['user' => $this->account->id()], ['absolute' => TRUE]);
        break;
        }
        }
        elseif ($route_name === 'user.page') {
        $redirect_url = Url::fromRoute('user.login', [], ['absolute' => TRUE]);
        }
        elseif (in_array($route_name, ['user.logout', 'user.logout.confirm'], TRUE)) {
        $redirect_url = Url::fromRoute('<front>', [], ['absolute' => TRUE]);
        }
        if ($redirect_url) {
        $event->setResponse(new RedirectResponse($redirect_url->toString()));
        case 'user.register';
        // Redirect an authenticated user to the profile form.
        $redirect_url = Url::fromRoute('entity.user.edit_form', ['user' => $this->account->id()], ['absolute' => TRUE]);
        break;
        }
        }
        }
        elseif ($route_name === 'user.page') {
        $redirect_url = Url::fromRoute('user.login', [], ['absolute' => TRUE]);
        }
        elseif (in_array($route_name, ['user.logout', 'user.logout.confirm'], TRUE)) {
        $redirect_url = Url::fromRoute('<front>', [], ['absolute' => TRUE]);
        }
        /**
        * {@inheritdoc}
        */
        public static function getSubscribedEvents(): array {
        // 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;
        if ($redirect_url) {
        $event->setResponse(new RedirectResponse($redirect_url->toString()));
        }
        }
        }
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Please register or to comment