Post

Symfony – Les Voters

Symfony – Les Voters

Cours 29 — Les Voters

Introduction

Un Voter permet de définir des règles d’autorisation personnalisées.

Il complète le système de rôles de Symfony.


Pourquoi utiliser un Voter ?

Les rôles permettent de répondre à la question :

1
L'utilisateur possède-t-il le rôle demandé ?

Un Voter permet de répondre à la question :

1
L'utilisateur a-t-il le droit d'accéder à cet objet ?

Exemple

1
2
3
Patient connecté
↓
Peut consulter son séjour

mais :

1
2
3
Patient connecté
↓
Ne peut pas consulter le séjour d'un autre patient

Créer un Voter

Commande :

1
php bin/console make:voter

Symfony crée :

1
src/Security/SejourVoter.php

Vérifier une autorisation

1
2
3
4
$this->denyAccessUnlessGranted(
    'VIEW',
    $sejour
);

Exemple dans un contrôleur

1
2
3
4
5
6
$sejour = $repository->find($id);

$this->denyAccessUnlessGranted(
    'VIEW',
    $sejour
);

Résultat

1
2
3
Autorisé
↓
Le contrôleur continue

ou :

1
2
3
Refusé
↓
Erreur 403

Principe du Voter

1
2
3
4
5
6
7
Utilisateur
↓
Objet
↓
Voter
↓
Autorisation ou refus

Différence avec les rôles

1
#[IsGranted('ROLE_USER')]

Vérifie :

1
Le rôle.

Un Voter vérifie :

1
Les droits sur un objet précis.

Conclusion

Les Voters permettent de gérer des règles de sécurité avancées.

À retenir :

1
denyAccessUnlessGranted()

Commande :

1
php bin/console make:voter

Utilisation :

1
2
3
4
5
Utilisateur
+
Objet
↓
Autorisation
This post is licensed under CC BY 4.0 by the author.