Програмно перенаправляти користувачів на типовий "доступ обмежений"


12

Я хотів би програмно перенаправити своїх користувачів на сторінку "доступ з обмеженим доступом" за замовчуванням. Я знаю, що мені потрібен об’єкт "RedirectResponse" для простого перенаправлення, але як я можу вказати тут сторінку "обмежений доступ" за замовчуванням?


1
Зазвичай, сторінка "з обмеженим доступом" створюється шляхом повернення коду стану 403, не перенаправлення на іншу сторінку. Ви спробували щось на кшталтreturn new Response('', Response::HTTP_FORBIDDEN);
П’єр Буйле

Відповіді:


24

Ви можете викинути виняток у будь-якій точці коду:

403:

throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();

404:

throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();

Потім виняток перехоплюється DefaultExceptionHtmlSubscriber та підзапит на /system/403або /system/404повертається, який ви можете налаштувати в основних налаштуваннях сайту, якщо ви не хочете відображати загальну сторінку "доступ заборонено" або "не знайдено".

Інші параметри залежать від місця розміщення коду:

  • Поверніть відповідь 403 або 404 від контролера або форми

  • Встановіть відповідь на подію, якщо ви підписалися на подію.

Що ніколи не слід робити, це направити відповідь безпосередньо. Це не зупиняє код і видає два відповіді, один ви надіслали, а один повернуто ядром Drupal. Це призведе до непередбачуваної поведінки.


2

Це здається правильним способом:

    $response = new RedirectResponse('/system/403');
    $event->setResponse($response);

2

Створіть свою переадресацію з маршруту, яким заборонено доступ до системи.

$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());

Це відведеть вас до сторінки забороненого доступу до стандартного доступу до Drupal. Маршрут визначений system.routing.ymlв ядрі.

Верхня відповідь дасть вам зруйнований доступ до браузера на основі браузера, який може бути те, що ви шукаєте. Якщо ви хочете, щоб ваш Drupal користувальницький інтерфейс відображався, використовуйте вищесказане.


0

На сторінці ви можете використовувати:

return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));

як-от: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8

Або з відправника:

$form_state->setRedirect('your.module.route.name');

Потім налаштуйте дозвіл доступу на "your.module.route.name"

Якщо ви не знаєте, як налаштувати дозвіл на доступ, перевірте: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


Я спробував $ response = new Response ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ відповідь); це показує користувачеві лише білу сторінку. Це занадто менше інформації. Я хочу показати сторінку Drupal за замовчуванням "заборонено в доступі".
джепстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.