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”?


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.


2

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

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

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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.