web-dev-qa-db-fra.com

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

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?

12
jepster

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/403 ou /system/404 est renvoyé, 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.

24
4k4

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 Drupal accès standard refusé. L'itinéraire est défini dans system.routing.yml dans le noyau.

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 voulez que votre Drupal UI s'affiche, utilisez ce qui précède.

2
CliveCleaves

Cela semble être la bonne façon:

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

À 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, vérifiez: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8

0
Net