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 :
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
|