ensureSystemRole( $manager, SystemRoles::ADMIN_CODE, 'Administrateur', 'Role administrateur - bypass complet via is_admin', ); $userRole = $this->ensureSystemRole( $manager, SystemRoles::USER_CODE, 'Utilisateur', 'Role de base sans permission specifique', ); $admin = new User(); $admin->setUsername('admin'); $admin->setIsAdmin(true); $admin->setPassword($this->passwordHasher->hashPassword($admin, 'admin')); $admin->addRbacRole($adminRole); $manager->persist($admin); $alice = new User(); $alice->setUsername('alice'); $alice->setPassword($this->passwordHasher->hashPassword($alice, 'alice')); $alice->addRbacRole($userRole); $manager->persist($alice); $bob = new User(); $bob->setUsername('bob'); $bob->setPassword($this->passwordHasher->hashPassword($bob, 'bob')); $bob->addRbacRole($userRole); $manager->persist($bob); $manager->flush(); } /** * Retourne le role systeme correspondant au code donne, en le creant * s'il n'existe pas encore (le purger Doctrine a pu vider la table role). * * La description est recopiee depuis la migration RBAC pour que les * deux chemins (migration prod, fixtures dev) produisent un etat * identique. */ private function ensureSystemRole( ObjectManager $manager, string $code, string $label, string $description, ): Role { $role = $this->roleRepository->findByCode($code); if (null !== $role) { return $role; } $role = new Role($code, $label, isSystem: true, description: $description); $manager->persist($role); return $role; } }