web-dev-qa-db-fra.com

Comment puis-je lever une exception 403 dans Symfony2?

Je vérifie s'il y a un jeton spécifique dans mon URI de demande et jette un Symfony\Component\Security\Core\Exception\AccessDeniedException s'il n'y a pas de jeton ou si le jeton est incorrect.

if(!isset($token) && $token != 'whatever') {
  throw new AccessDeniedException('No token given or token is wrong.');
}

Mais lorsque j'utilise ce AccessDeniedException, Symfony2 redirige simplement vers la page de connexion. Au lieu de cela, j'aimerais avoir une page d'erreur 403 dédiée (j'ai déjà créé app/Resources/TwigBundle/views/Exceptions/error403.html.twig fichier).

Que devrais-je changer pour y parvenir? Dois-je utiliser une exception PHP native? Mais comment puis-je dire pour passer un code d'erreur 403?

Symfony2 a-t-il peut-être une exception 403 spécifique qui ne redirige pas simplement vers la connexion?

24
Gottlieb Notschnabel

Jeter Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException.

Cela contournera le système de sécurité et vous donnera une réponse 403 qui à son tour sera récupérée par l'écouteur d'exception twig.

45
Cerad

Depuis Symfony 2.6, vous pouvez utiliser le raccourci de contrôleur suivant qui déclenchera la bonne exception pour vous:

return $this->denyAccessUnlessGranted('ROLE_EDIT', $item, 'You cannot edit this item.');
3
COil