Rediriger par programme les utilisateurs vers le "accès restreint" par défaut


12

Je voudrais rediriger par programme mes utilisateurs vers la page par défaut "accès restreint". Je sais que j'ai besoin d'un objet "RedirectResponse" pour une simple redirection, mais comment puis-je spécifier la page par défaut "accès restreint" ici?


1
Habituellement, une page "accès restreint" est produite en renvoyant un code d'état 403, sans rediriger vers une autre page. Avez-vous essayé quelque chose commereturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

Réponses:


24

Vous pouvez lever une exception à tout moment dans votre code:

403:

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

404:

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

L'exception est ensuite interceptée par DefaultExceptionHtmlSubscriber et une sous-demande pour /system/403ou /system/404est renvoyée, que vous pouvez configurer dans les paramètres de base du site si vous ne souhaitez pas afficher une page générique "accès refusé" ou "introuvable".

Les autres options dépendent de l'endroit où le code est placé:

  • Renvoyer une réponse 403 ou 404 à partir d'un contrôleur ou d'un formulaire

  • Définissez une réponse dans un événement si vous êtes abonné à un événement.

Ce que vous ne devriez jamais faire, c'est envoyer une réponse directement. Cela n'arrête pas le code et produit deux réponses, une que vous avez envoyée et une retournée par le noyau Drupal. Cela entraînera un comportement imprévisible.


2

Cela semble être la bonne façon:

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

2

Créez votre redirection à partir de l'itinéraire d'accès refusé du système.

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

Cela vous amène à la page d'accès standard Drupal refusée. L'itinéraire est défini dans system.routing.ymlin core.

La première réponse vous donnera un accès refusé basé sur un navigateur, ce qui peut être ce que vous recherchez. Si vous souhaitez que votre interface utilisateur Drupal s'affiche, utilisez ce qui précède.


0

À partir d'une page, vous pouvez utiliser:

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

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

Ou à partir d'une soumission:

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

Ensuite, configurez l'autorisation d'accès de «your.module.route.name»

Si vous ne savez pas comment configurer la permission d'accès, consultez: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


J'ai essayé $ response = new Response ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ response); cela montre seulement une page blanche à l'utilisateur. C'est trop peu d'informations. Je veux afficher la page par défaut "accès refusé" de Drupal.
jepster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.