Il n’y a pas de drapeau enabled. Enregistrer le bundle vaut activation, et à partir de cet instant le composant décide, sans qu’une ligne de votre security.yaml ne change.
composer require spomky-labs/access-control-bundle
// config/bundles.php
return [
// ...
AccessControl\Bundle\AccessControlBundle::class => ['all' => true],
];
Voilà tout le premier jour. Aucune configuration n’est requise : tout a une valeur par défaut, et les réglages vivent sous une seule clé racine le jour où vous en voudrez.
Ce qu’il reprend à son compte
#[IsGranted]est lu par l’écouteur de ce composant plutôt que par celui de Security.is_granted()dans Twig reçoit sa réponse de l’extension de ce composant.- Les règles de
security.access_controlsont appliquées par le gestionnaire de décision de ce composant. - Votre hiérarchie de rôles est partagée : un seul arbre, lu par les deux piles.
- Vos votants continuent d’être consultés, enveloppés pour répondre aux questions posées ici.
Les réponses ne changent pas. Votre configuration ne bouge pas, votre code ne bouge pas, rien n’est déprécié et rien n’avertit. Ce qui a changé, c’est qui décide.
Un point d’entrée est délibérément laissé tranquille : les gardes de workflow continuent de passer par l’écouteur de Symfony quand Security est installé, parce que l’écouteur de garde de Security atteint déjà ce composant à travers le gestionnaire de décision. Le remplacer n’apporterait rien et coûterait le résolveur de confiance qu’une expression peut nommer.
Vérifiez qu’il a bien pris la main
Ouvrez n’importe quelle page avec le profileur activé. L’onglet Configuration du panneau Access Control nomme quelle pile répond à quoi : les décisions, #[IsGranted], et les fonctions de gabarit.
S’il dit encore security là où vous attendiez le composant, la passerelle n’a pas pris la main, et cela vaut mieux le découvrir un mardi après-midi qu’après une mise en production. En ligne de commande, bin/console debug:container --tag=access_control.voter liste ce qui est enregistré.
Le seul cas où il refuse de s’installer
Une application qui emploie l’ACL au niveau du champ dans ses gabarits, c’est à dire is_granted('EDIT', post, 'title'), ne peut pas enregistrer ce bundle. Ce troisième argument passe par symfony/acl, et aucun votant ici ne comprend un vote sur un champ.
Plutôt que de répondre false, qu’un gabarit ne peut pas distinguer d’un vrai refus, la fonction lève. Un refus qu’un appelant ne peut pas distinguer d’un refus authentique relève de la même famille de faute qu’une garde qui laisse passer, et ce composant préfère arrêter la compilation.
Si vous n’avez pas de Security du tout
Tout ce qui précède vaut encore, moins les reprises, et trois choses méritent un mot :
AbstractController::isGranted()etdenyAccessUnlessGranted()demandent un trait, parce que le contrôle qui lève sans SecurityBundle vit dans FrameworkBundle, que ce projet ne corrige pas.- Les gardes de workflow demandent
symfony/security-coreinstallé, mais jamais utilisé. Celle-là a une histoire, et elle aura son article. - Vous devez dire au composant qui demande, puisqu’il n’y a pas de jeton à lire.
La page d’installation donne le tableau complet de ce qui bouge et de ce qui ne bouge pas.