Programowo przekierowuj użytkowników do domyślnego „ograniczonego dostępu”

12

Chciałbym programowo przekierować moich użytkowników na domyślną stronę „dostęp ograniczony”. Wiem, że potrzebuję obiektu „RedirectResponse” dla prostego przekierowania, ale jak mogę tutaj określić domyślną stronę „z ograniczonym dostępem”?

jepster
źródło
1
Zwykle strona „z ograniczonym dostępem” jest tworzona przez zwrócenie kodu stanu 403, bez przekierowywania na inną stronę. Czy próbowałeś czegoś takiegoreturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

Odpowiedzi:

24

Możesz zgłosić wyjątek w dowolnym momencie kodu:

403:

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

404:

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

Wyjątek jest następnie przechwytywany przez DefaultExceptionHtmlSubscriber i zwracane jest zapytanie /system/403lub żądanie /system/404, które można skonfigurować w podstawowych ustawieniach witryny, jeśli nie chcesz wyświetlać ogólnej strony „odmowa dostępu” lub „nie znaleziono”.

Inne opcje zależą od tego, gdzie znajduje się kod:

  • Zwraca odpowiedź 403 lub 404 ze sterownika lub formularza

  • Ustaw odpowiedź w zdarzeniu, jeśli jesteś subskrybentem wydarzenia.

Nigdy nie powinieneś wysyłać odpowiedzi bezpośrednio. Nie zatrzymuje to kodu i generuje dwie odpowiedzi, jedną wysłaną i jedną zwróconą przez jądro Drupala. Spowoduje to nieprzewidziane zachowanie.

4k4
źródło
2

Wydaje się, że to właściwy sposób:

    $response = new RedirectResponse('/system/403');
    $event->setResponse($response);
jepster
źródło
2

Zbuduj przekierowanie z trasy, do której system nie ma dostępu.

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

Spowoduje to przejście do standardowej strony odmowy dostępu Drupal. Trasa jest zdefiniowana system.routing.ymlw rdzeniu.

Najlepsza odpowiedź da ci odmowę dostępu odmówionego dostępu, co może być tym, czego szukasz. Jeśli chcesz, aby Twój interfejs Drupal był wyświetlany, użyj powyższego.

CliveCleaves
źródło
0

Na stronie możesz użyć:

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

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

Lub od z:

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

Następnie skonfiguruj uprawnienia dostępu do „your.module.route.name”

Jeśli nie wiesz, jak skonfigurować uprawnienia dostępu, sprawdź: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8

Netto
źródło
Próbowałem $ response = nowa odpowiedź ('', odpowiedź :: HTTP_FORBIDDEN); $ event-> setResponse ($ response); pokazuje to tylko białą stronę użytkownikowi. To za mało informacji. Chcę wyświetlić domyślną stronę „odmowa dostępu” z Drupal.
jepster