Sécuriser les contrôleurs Symfony avec `isGranted` - david-alpha/gdn GitHub Wiki
isGranted
🔐 Sécuriser les contrôleurs Symfony avec Ce guide explique étape par étape comment mettre en place la sécurité dans un projet Symfony (comme github.com/david-alpha/gdn) en utilisant le composant natif isGranted
.
⚙️ Étape 1 : Installer le composant de sécurité Symfony
Assurez-vous que le composant security-bundle
est installé :
composer require symfony/security-bundle
Cela installera le système de sécurité Symfony et générera un fichier de configuration : config/packages/security.yaml
.
🔧 Étape 2 : Configurer le système de sécurité
Modifiez le fichier config/packages/security.yaml
avec une configuration de base :
security:
password_hashers:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
providers:
users_in_memory: { memory: null }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
lazy: true
provider: users_in_memory
form_login:
login_path: login
check_path: login
logout:
path: logout
target: /
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/profile, roles: ROLE_USER }
User
👤 Étape 3 : Créer une entité Créez une entité utilisateur qui implémente UserInterface
:
php bin/console make:user
Répondez aux questions pour définir les champs nécessaires (email, mot de passe, rôles...).
🚪 Étape 4 : Définir les routes de connexion et de déconnexion
Dans config/routes.yaml
, ajoutez :
login:
path: /login
controller: App\Controller\SecurityController::login
logout:
path: /logout
Puis, créez le contrôleur SecurityController
avec les méthodes login()
et éventuellement logout()
si nécessaire.
isGranted
✅ Étape 5 : Restreindre l’accès avec Dans vos contrôleurs, utilisez l’attribut #[IsGranted]
pour restreindre l’accès par rôle :
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class AdminController extends AbstractController
{
#[IsGranted('ROLE_ADMIN')]
public function dashboard(): Response
{
// Contenu réservé aux admins
}
}
isGranted
🧠 Étape 6 : Expressions complexes avec Pour gérer des règles d’accès complexes :
use Symfony\Component\ExpressionLanguage\Expression;
#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or user.isSuperAdmin()'))]
public function manage(): Response
{
// Autorisé aux admins OU aux super-admins
}
👉 Pour plus d’informations : Symfony - Expressions de sécurité
🧪 Étape 7 : Tester les droits d’accès
Testez votre configuration :
- Connectez-vous avec différents utilisateurs.
- Essayez d’accéder à des routes restreintes.
- Vérifiez que les restrictions fonctionnent bien selon les rôles.
✅ Conclusion
En appliquant ces étapes, vous sécurisez efficacement vos contrôleurs Symfony grâce au système isGranted
, en profitant de la robustesse et de la souplesse du composant de sécurité Symfony.