Программно перенаправить пользователей к «ограниченному доступу» по умолчанию


12

Я хотел бы программно перенаправить своих пользователей на страницу по умолчанию «доступ ограничен». Я знаю, что мне нужен объект "RedirectResponse" для простого перенаправления, но как мне здесь указать страницу по умолчанию с ограниченным доступом?


1
Обычно страница с ограниченным доступом создается путем возврата кода состояния 403 без перенаправления на другую страницу. Вы пробовали что-то вродеreturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

Ответы:


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 UI показывал, используйте выше.


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 = новый ответ ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ ответа); это показывает только белую страницу для пользователя. Это слишком мало информации. Я хочу показать страницу по умолчанию "отказано в доступе" из Drupal.
Джепстер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.