fix(rbac) : rattache le rôle de base « user » et gate le frontend par permission #32

Merged
matthieu merged 1 commits from fix/rbac-default-user-role into develop 2026-06-29 09:01:02 +00:00
Owner

Un utilisateur non-admin avec des permissions sur le rôle RBAC « user » ne voyait rien : le ROLE_USER legacy n'a aucun lien avec le RBAC et getEffectivePermissions() ne lit que rbacRoles + permissions directes, alors qu'aucun user n'était rattaché au rôle « user » (table user_role vide, jamais backfillée).

Backend

  • DefaultUserRoleAssigner + UserDefaultRoleListener (prePersist) : tout nouvel utilisateur est rattaché au rôle « user » sur tous les chemins de persistance (API, MCP, fixtures).
  • Commande app:assign-default-roles (backfill idempotent des users existants) + ajout au deploy.sh après sync-permissions.
  • AppFixtures : seed des rôles système déplacé avant la création des users.

Frontend (gating par permission au lieu de ROLE_ADMIN legacy)

  • Nouveau middleware générique permission + augmentation PageMeta : definePageMeta({ permission }) (string = requise, array = any), ROLE_ADMIN bypasse.
  • Pages Répertoire / Reporting / Administration gatées par permission, alignées sur la sécurité backend.
  • SidebarFilter accepte une liste de permissions (any) ; section « Administration » dégatée du rôle.
  • team-absences reste en ROLE_ADMIN : le module Absence n'est pas encore RBAC-isé côté backend (dette identifiée).

Tests

  • UserDefaultRoleListenerTest, AssignDefaultRolesCommandTest, extension de SidebarFilterTest (gate permission en tableau). Suite complète verte (231 tests). Build frontend OK.

Déploiement

Le deploy.sh lance app:assign-default-roles (idempotent). Pour débloquer la prod immédiatement sans déploiement : rattacher les users existants au rôle « user » dans user_role.

Un utilisateur non-admin avec des permissions sur le rôle RBAC « user » ne voyait rien : le ROLE_USER legacy n'a aucun lien avec le RBAC et `getEffectivePermissions()` ne lit que `rbacRoles` + permissions directes, alors qu'aucun user n'était rattaché au rôle « user » (table `user_role` vide, jamais backfillée). ## Backend - `DefaultUserRoleAssigner` + `UserDefaultRoleListener` (prePersist) : tout nouvel utilisateur est rattaché au rôle « user » sur tous les chemins de persistance (API, MCP, fixtures). - Commande `app:assign-default-roles` (backfill idempotent des users existants) + ajout au `deploy.sh` après `sync-permissions`. - `AppFixtures` : seed des rôles système déplacé avant la création des users. ## Frontend (gating par permission au lieu de ROLE_ADMIN legacy) - Nouveau middleware générique `permission` + augmentation `PageMeta` : `definePageMeta({ permission })` (string = requise, array = any), ROLE_ADMIN bypasse. - Pages Répertoire / Reporting / Administration gatées par permission, alignées sur la sécurité backend. - `SidebarFilter` accepte une liste de permissions (any) ; section « Administration » dégatée du rôle. - `team-absences` reste en ROLE_ADMIN : le module Absence n'est pas encore RBAC-isé côté backend (dette identifiée). ## Tests - `UserDefaultRoleListenerTest`, `AssignDefaultRolesCommandTest`, extension de `SidebarFilterTest` (gate permission en tableau). Suite complète verte (231 tests). Build frontend OK. ## Déploiement Le `deploy.sh` lance `app:assign-default-roles` (idempotent). Pour débloquer la prod immédiatement sans déploiement : rattacher les users existants au rôle « user » dans `user_role`.
matthieu added 1 commit 2026-06-29 08:28:18 +00:00
fix(rbac) : rattache le rôle de base « user » et gate le frontend par permission
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 42s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m1s
1ab2eeccca
Un user avec des permissions sur le rôle RBAC « user » ne voyait rien : le
ROLE_USER legacy n'a aucun lien avec le RBAC et getEffectivePermissions() ne lit
que rbacRoles + permissions directes, alors qu'aucun user n'était rattaché au
rôle « user » (table user_role vide, jamais backfillée).

Backend
- DefaultUserRoleAssigner + UserDefaultRoleListener (prePersist) : tout nouvel
  utilisateur est rattaché au rôle « user » sur tous les chemins de persistance.
- Commande app:assign-default-roles (backfill idempotent) + ajout au deploy.sh.
- AppFixtures : seed des rôles système avant la création des users.

Frontend (gating par permission au lieu de ROLE_ADMIN legacy)
- Nouveau middleware « permission » + augmentation PageMeta : definePageMeta
  ({ permission }) (string = requise, array = any), ROLE_ADMIN bypasse.
- Pages directory/reporting/admin gatées par permission ; SidebarFilter accepte
  une liste de permissions (any) ; section admin sans gate de rôle.
- team-absences reste en ROLE_ADMIN (module Absence non RBAC-isé côté backend).
matthieu merged commit fc18200d63 into develop 2026-06-29 09:01:02 +00:00
matthieu deleted branch fix/rbac-default-user-role 2026-06-29 09:01:08 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Lesstime#32