Redirecione programaticamente os usuários para o "acesso restrito" padrão

12

Gostaria de redirecionar programaticamente meus usuários para a página "acesso restrito" padrão. Sei que preciso de um objeto "RedirectResponse" para um redirecionamento simples, mas como especificar a página "acesso restrito" padrão aqui?

jepster
fonte
1
Normalmente, uma página "acesso restrito" é produzida retornando um código de status 403, não redirecionando para outra página. Você tentou algo parecido comreturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

Respostas:

24

Você pode lançar uma exceção em qualquer ponto do seu código:

403:

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

404:

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

A exceção é capturada pelo DefaultExceptionHtmlSubscriber e uma sub-solicitação /system/403ou /system/404é retornada, que você pode configurar nas configurações básicas do site, se não desejar exibir uma página genérica de "acesso negado" ou "não encontrado".

Outras opções dependem de onde o código é colocado:

  • Retornar uma resposta 403 ou 404 de um controlador ou formulário

  • Defina uma resposta em um evento se você estiver em um assinante de evento.

O que você nunca deve fazer é enviar uma resposta diretamente. Isso não interrompe o código e produz duas respostas, uma que você enviou e outra retornada pelo kernel do Drupal. Isso resultará em comportamento imprevisível.

4k4
fonte
2

Este parece ser o caminho certo:

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

Crie seu redirecionamento a partir da rota de acesso negado do sistema.

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

Isso leva você à página de acesso padrão do Drupal negado. A rota é definida system.routing.ymlno núcleo.

A resposta principal fornecerá um acesso negado, baseado no navegador, negado, que pode ser o que você está procurando. Se você deseja que a interface do usuário do Drupal seja exibida, use o acima.

CliveCleaves
fonte
0

Em uma página, você pode usar:

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

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

Ou a partir de um envio:

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

Em seguida, configure a permissão de acesso de 'your.module.route.name'

Se você não souber configurar a permissão de acesso, verifique: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8

Internet
fonte
Eu tentei $ response = new Response ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ response); isso mostra apenas uma página em branco para o usuário. Isso é muito menos informação. Quero mostrar a página "acesso negado" padrão do Drupal.
jepster