feat(core) : RBAC Task 3 - mutation User (isAdmin + roles RBAC + permissions directes)

- Suppression de la colonne JSON roles (persiste jusqu'a la migration Task 5)
- Ajout is_admin bool (seul levier de bypass RBAC via getRoles())
- Ajout ManyToMany User-Role (EAGER, table user_role)
- Ajout ManyToMany User-Permission directes (EAGER, table user_permission)
- getEffectivePermissions() : union dedupliquee triee, utilisee par le
  futur PermissionVoter (#345)
- getRbacRoles() pour ne pas shadow getRoles() de UserInterface Symfony
- Tests unitaires couvrant derivation getRoles, union, deduplication, tri

Ticket #343 - 3/7 : migration du User vers le modele RBAC relationnel.
Fetch EAGER documente : evite le lazy-load au refresh JWT.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-04-14 16:48:49 +02:00
parent 3b34d00872
commit 7aa32b1972
4 changed files with 282 additions and 15 deletions

View File

@@ -49,7 +49,8 @@ class CreateUserCommand extends Command
$user->setPassword($this->passwordHasher->hashPassword($user, $plainPassword));
if ($input->getOption('admin')) {
$user->setRoles(['ROLE_ADMIN']);
// TODO Task 6 : attacher l'entite Role "admin" en plus du flag is_admin.
$user->setIsAdmin(true);
}
$this->userRepository->save($user);