veilletech.fr
23 sept. Feed du jour
#04 SYMFONY Article

Symfony 8.2 : des jokers dans la hiérarchie des rôles

Un joker ne se relit pas tout seul. Un debug:roles, si.

Symfony 8.2 accepte l'astérisque dans les clés de role_hierarchy : ROLE_BLOG_* couvre toute une famille de rôles, y compris ceux qui ne sont déclarés nulle part. Pour garder la main, une commande debug:roles liste les rôles réellement accordés et explique leur origine, et le graphe de la hiérarchie s'affiche dans le panneau Security du profileur.

2 min de lectureintermédiairevidéo 1:14
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Les jokers
  3. Voir ce qui est vraiment accordé
  4. Ce que ça change
  5. À retenir

Ce qui se passe

Symfony 8.2 retouche role_hierarchy, le bloc qui déclare quels rôles en incluent d'autres. Dans une application qui multiplie les rôles, il s'allonge vite, et savoir ce qu'un utilisateur possède réellement devient difficile. Deux réponses : des jokers pour écrire moins, des outils pour voir le résultat.

Les jokers

Une clé de la hiérarchie peut désormais contenir * et viser une famille entière. Exemple écrit pour cette fiche :

config/packages/security.yamlYAML
security:
    role_hierarchy:
        'ROLE_BLOG_*': [ROLE_BLOG_READER, ROLE_USER]

Tout rôle en ROLE_BLOG_ reçoit alors ROLE_BLOG_READER et ROLE_USER, même s'il n'est déclaré nulle part : un utilisateur doté de ROLE_BLOG_COMMENTER en hérite sans ligne supplémentaire.

Deux règles :

Voir ce qui est vraiment accordé

Ce que ça change

Le joker supprime des lignes mais déplace une décision. Sans lui, un nouveau rôle n'a que ce qu'on lui donne. Avec ROLE_BLOG_*, il hérite dès sa création de ce que reçoit la famille — y compris un rôle qu'on voudrait restrictif, un ROLE_BLOG_BANNED par exemple. La sortie de debug:roles --tree a donc sa place dans toute revue de code qui touche à la sécurité.

Jokers et debug:roles par Nicolas Rigaud, graphe dans le profileur par Damien Fernandes.

Source : New in Symfony 8.2: Role Hierarchy Wildcards and Debugging, blog Symfony, 22 septembre 2026.