Redirija programáticamente a los usuarios al "acceso restringido" predeterminado

12

Me gustaría redirigir programáticamente a mis usuarios a la página predeterminada de "acceso restringido". Sé que necesito un objeto "RedirectResponse" para una redirección simple, pero ¿cómo especifico aquí la página predeterminada de "acceso restringido"?

jepster
fuente
1
Por lo general, una página de "acceso restringido" se produce al devolver un código de estado 403, no redirigir a otra página. ¿Intentaste algo comoreturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

Respuestas:

24

Puede lanzar una excepción en cualquier punto de su código:

403:

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

404:

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

La excepción es detectada por DefaultExceptionHtmlSubscriber y se devuelve una subrequest para /system/403o que /system/404se devuelve, que puede configurar en la configuración básica del sitio si no desea mostrar una página genérica de "acceso denegado" o "no encontrado".

Otras opciones dependen de dónde se coloca el código:

  • Devuelve una respuesta 403 o 404 de un controlador o un formulario

  • Establezca una respuesta en un evento si está suscrito a un evento.

Lo que nunca debe hacer es enviar una respuesta directamente. Esto no detiene el código y produce dos respuestas, una que ha enviado y otra devuelta por el núcleo de Drupal. Esto dará como resultado un comportamiento impredecible.

4k4
fuente
2

Esta parece ser la forma correcta:

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

Cree su redirección desde la ruta de acceso denegado del sistema.

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

Esto lo lleva a la página de acceso denegado de Drupal estándar. La ruta se define system.routing.ymlen el núcleo.

La respuesta principal le dará un acceso denegado basado en el acceso denegado, que puede ser lo que está buscando. Si desea que se muestre su IU de Drupal, use lo anterior.

CliveCleaves
fuente
0

Desde una página, puede usar:

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

como: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8

O de un de enviar:

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

Luego configure el permiso de acceso de 'your.module.route.name'

Si no sabe cómo configurar el permiso de acceso, consulte: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8

Red
fuente
He intentado $ response = new Response ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ respuesta); esto muestra solo una página en blanco para el usuario. Esa es muy poca información. Quiero mostrar la página predeterminada de "acceso denegado" de Drupal.
jepster