Reindirizzare a livello di codice gli utenti al "accesso limitato" predefinito


12

Vorrei reindirizzare a livello di codice i miei utenti alla pagina predefinita "accesso limitato". So che ho bisogno di un oggetto "RedirectResponse" per un semplice reindirizzamento, ma come posso specificare qui la pagina predefinita "con accesso limitato"?


1
Di solito, viene prodotta una pagina "ad accesso limitato" restituendo un codice di stato 403, senza reindirizzare a un'altra pagina. Hai provato qualcosa del generereturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle,

Risposte:


24

Puoi generare un'eccezione in qualsiasi punto del codice:

403:

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

404:

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

L'eccezione viene quindi rilevata da DefaultExceptionHtmlSubscriber e viene restituita una richiesta secondaria /system/403o /system/404restituita, che è possibile configurare nelle impostazioni di base del sito se non si desidera visualizzare una pagina generica "accesso negato" o "non trovato".

Altre opzioni dipendono da dove si trova il codice:

  • Restituisce una risposta 403 o 404 da un controller o un modulo

  • Imposta una risposta in un evento se sei iscritto a un evento.

Quello che non dovresti mai fare è inviare una risposta direttamente. Questo non ferma il codice e produce due risposte, una che hai inviato e una restituita dal kernel Drupal. Ciò comporterà un comportamento imprevedibile.


2

Questo sembra essere il modo giusto:

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

2

Crea il reindirizzamento dalla route di accesso negata al sistema.

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

Questo ti porta alla pagina di accesso negato di Drupal standard. Il percorso è definito system.routing.ymlin core.

La risposta migliore ti darà un accesso negato basato su Accesso negato, che potrebbe essere quello che stai cercando. Se vuoi mostrare l'interfaccia utente di Drupal, usa quanto sopra.


0

Da una pagina, puoi usare:

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

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

O da un da inviare:

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

Quindi configurare l'autorizzazione di accesso di "your.module.route.name"

Se non sai come configurare le autorizzazioni di accesso, controlla: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


Ho provato $ response = new Response ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ response); questo mostra solo una pagina bianca all'utente. Sono troppe meno informazioni. Voglio mostrare la pagina predefinita "accesso negato" da Drupal.
jepster,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.