Skip to content

Sécurise le back-office admin : matrice READ/WRITE par module et IsGranted - #2429

Open
Korbeil wants to merge 1 commit into
afup:masterfrom
Korbeil:afup-ajouter-un-check-isgranted
Open

Korbeil wants to merge 1 commit into
afup:masterfrom
Korbeil:afup-ajouter-un-check-isgranted

Conversation

@Korbeil

@Korbeil Korbeil commented Oct 10, 2026

Copy link
Copy Markdown
Member

Description

Refonte complète du contrôle d'accès au back-office /admin suivant l'audit de sécurité : chaque module dispose désormais d'un couple de rôles *READER/*WRITER, ROLE_ADMIN devient un simple marqueur d'accès à la console et ROLE_SUPER_ADMIN n'est plus attribué automatiquement. Toutes les routes admin sont maintenant fermées explicitement (deux barrières), avec un filet default-deny. Changement cassant : les comptes avec LEVEL_ADMIN ne récupèrent que ROLE_ADMIN (l'impersonation nécessite désormais ROLE_SUPER_ADMIN attribué explicitement).

Changes

  • Ajout d'un attribut #[IsGranted] sur tous les controllers admin (lecture sur les listes/exports, écriture sur les add/edit/delete), avec matrice testée par un data provider PHPUnit sur chaque route.
  • Réécriture de access_control : règles explicites par module (READ sur les consultations, WRITE sur les mutations), page « Divers » réservée à ROLE_SUPER_ADMIN, default-deny sur le reste de /admin.
  • Nouvelle hiérarchie de rôles : WRITE ⇒ READ ⇒ ROLE_ADMIN (marqueur console vide), ROLE_SUPER_ADMIN = tous les READ + impersonation ; rôles legacy (ROLE_VEILLE, ROLE_SITE, ROLE_FORUM, ROLE_APERO, ROLE_ANTENNE, ROLE_ANNUAIRE) forcés en pont vers les nouveaux rôles.
  • Menu back-office et compte utilisateur alignés sur ces rôles (visibilité par rôle READ minimal de chaque catégorie).

How to test

  1. Connecter un adhérent à cotisation expirée : il ne doit plus accéder à aucune page /admin (403 sur /admin/logs, /admin/speaker, …).
  2. Avec un compte ROLE_SUPER_ADMIN : vérifier l'accès complet (listes en lecture + actions d'écriture) et les pages Divers ; avec un compte limité à un rôle module (ex. ROLE_VEILLE_READER) : console visible mais uniquement les pages de son module.
  3. Lancer vendor/bin/phpunit tests/integration/AppBundle/Security/AdminAccessControlTest.php : chaque route /admin doit passer la matrice d'accès au furet des rôles.

Comment thread config/packages/security.yaml
Comment thread config/packages/security.yaml
@Korbeil
Korbeil force-pushed the afup-ajouter-un-check-isgranted branch from a9c5ba0 to 49df2cf Compare October 12, 2026 14:35
@Korbeil
Korbeil marked this pull request as ready for review October 12, 2026 15:00
@Korbeil
Korbeil force-pushed the afup-ajouter-un-check-isgranted branch from 49df2cf to ee8c035 Compare October 12, 2026 15:16
@Korbeil
Korbeil requested a review from stakovicz October 12, 2026 15:21
@Korbeil
Korbeil force-pushed the afup-ajouter-un-check-isgranted branch from ee8c035 to 239742e Compare October 13, 2026 14:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants