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?
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.
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.
Cela semble être la bonne façon:
$response = new RedirectResponse('/system/403');
$event->setResponse($response);
À 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