UserController
extends AbstractController
in package
Administre les comptes utilisateurs de la plateforme depuis le back-office.
Couvre la recherche et le listing des comptes, leur création (avec création automatique de l'entreprise pour un ROLE_MANAGER et envoi des identifiants par email), leur modification, leur activation/désactivation et leur suppression. Les habilitations sont graduées : ROLE_ADMIN a la main sur tout, ROLE_OPERATOR et ROLE_SUPPORT ne peuvent activer que des comptes clients, et ROLE_OPERATOR ne peut désactiver que des comptes Support. Chaque opération sensible est journalisée via AuditLogger.
Aucun préfixe ni contrôle d'accès au niveau de la classe : les routes sont déclarées
individuellement sous /admin/... et les rôles sont vérifiés méthode par méthode.
Table of Contents
Properties
- $auditLogger : AuditLogger
- $logger : LoggerInterface
Methods
- __construct() : mixed
- activateUser() : Response
- Active et marque comme vérifié un compte utilisateur, puis prévient son titulaire par email.
- addUser() : Response
- Crée un compte utilisateur depuis le back-office.
- deactivateUser() : Response
- Désactive un compte utilisateur et en informe son titulaire par email.
- deleteUser() : Response
- Supprime définitivement un compte utilisateur ainsi que ses données rattachées.
- listsUsers() : Response
- Affiche la liste paginée des comptes utilisateurs, avec recherche.
- updateUser() : Response
- Modifie un compte utilisateur existant.
Properties
$auditLogger read-only
private
AuditLogger
$auditLogger
$logger read-only
private
LoggerInterface
$logger
Methods
__construct()
public
__construct(LoggerInterface $logger, AuditLogger $auditLogger) : mixed
Parameters
- $logger : LoggerInterface
-
Journal applicatif, utilisé pour tracer les échecs d'envoi d'email.
- $auditLogger : AuditLogger
-
Service d'audit enregistrant les créations, modifications, activations, désactivations et suppressions de comptes.
activateUser()
Active et marque comme vérifié un compte utilisateur, puis prévient son titulaire par email.
public
activateUser(User $user, Request $request, EntityManagerInterface $entityManager, MailerService $mailerService) : Response
Le jeton CSRF activate_user_<id> est vérifié en premier ; s'il est invalide, un flash
d'erreur est affiché et l'utilisateur est redirigé vers la liste. Règle d'habilitation : un
ROLE_ADMIN peut activer n'importe quel compte ; à défaut, l'appelant doit être ROLE_OPERATOR
ou ROLE_SUPPORT et ne peut activer que des comptes portant ROLE_USER — sinon accès refusé ou
message « Vous ne pouvez activer que des comptes clients. ». Si le compte est déjà activé
et vérifié, un flash d'information est affiché sans modification.
Sinon activated et verified passent à true, le flush est effectué, l'action est
journalisée, puis un email (modèle user_activation_email) contenant l'URL de connexion
absolue est envoyé ; un échec d'envoi produit un avertissement et une entrée de log sans
annuler l'activation.
Route : /admin/users/{id}/activate (POST), nom app_user_activate.
Requiert ROLE_ADMIN, ou ROLE_OPERATOR/ROLE_SUPPORT sur un compte client.
Parameters
- $user : User
-
Utilisateur ciblé, résolu depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token. - $entityManager : EntityManagerInterface
-
Gestionnaire d'entités.
- $mailerService : MailerService
-
Service d'envoi de l'email d'activation.
Attributes
- #[Route]
- '/admin/users/{id}/activate'
- $name: 'app_user_activate'
- $methods: ['POST']
Return values
Response —Redirection vers app_user_list dans tous les cas.
addUser()
Crée un compte utilisateur depuis le back-office.
public
addUser(Request $request, EntityManagerInterface $entityManager, UploaderService $uploaderService, UserPasswordHasherInterface $userPasswordHasher, MailerService $mailerService) : Response
L'accès est refusé si l'utilisateur n'est ni ROLE_ADMIN ni ROLE_OPERATOR. Le formulaire est
configuré avec le champ mot de passe affiché mais non obligatoire, et l'option is_admin
activée uniquement pour ROLE_ADMIN.
Traitements à la soumission : l'image de profil éventuelle est déposée dans le répertoire
profile_user_directory ; si un mot de passe est saisi il est hashé et l'indicateur
mustChangePassword est positionné à true. Si le compte porte ROLE_MANAGER, une entité
Company est créée et rattachée à partir des champs companyName,
companyEmployeeCount, companyAddress, companyCity, companyCountry ainsi que des champs
facultatifs email, téléphone et site web (le contrôle interdisant les domaines d'email
personnels est présent mais commenté). Un compte ROLE_OPERATOR ou ROLE_SUPPORT est
directement marqué comme activé et vérifié. Après flush, la création est journalisée puis un
email contenant les identifiants (modèle create_credential) est envoyé ; un échec d'envoi
produit un flash d'avertissement et une entrée de log sans annuler la création. À noter :
deux messages flash de succès sont ajoutés lorsque l'email part correctement.
Route : /admin/users-new (toutes méthodes), nom app_user_new.
Requiert ROLE_ADMIN ou ROLE_OPERATOR.
Parameters
- $request : Request
-
Requête HTTP courante, utilisée pour traiter le formulaire.
- $entityManager : EntityManagerInterface
-
Gestionnaire d'entités pour persister l'utilisateur et son entreprise.
- $uploaderService : UploaderService
-
Service de dépôt de l'image de profil.
- $userPasswordHasher : UserPasswordHasherInterface
-
Service de hachage du mot de passe en clair.
- $mailerService : MailerService
-
Service d'envoi de l'email d'identifiants.
Attributes
- #[Route]
- '/admin/users-new'
- $name: 'app_user_new'
Return values
Response —Rendu du template admin/user/create-user.html.twig, ou redirection vers
app_user_list après création réussie.
deactivateUser()
Désactive un compte utilisateur et en informe son titulaire par email.
public
deactivateUser(User $user, Request $request, EntityManagerInterface $entityManager, MailerService $mailerService) : Response
Le jeton CSRF deactivate_user_<id> est contrôlé en premier. Règle d'habilitation, plus
stricte que pour l'activation : un ROLE_ADMIN peut désactiver n'importe quel compte ; un
ROLE_OPERATOR ne peut désactiver que des comptes portant ROLE_SUPPORT (message d'erreur
sinon) ; tout autre rôle, y compris ROLE_SUPPORT, se voit refuser l'accès. Si le compte est
déjà à la fois non activé et non vérifié, un flash d'information est affiché sans modification.
Sinon activated et verified passent à false, le flush est effectué, l'action est
journalisée, puis un email (modèle user_deactivation_email) est envoyé ; un échec d'envoi
produit un avertissement et une entrée de log sans annuler la désactivation.
Route : /admin/users/{id}/deactivate (POST), nom app_user_deactivate.
Requiert ROLE_ADMIN, ou ROLE_OPERATOR sur un compte Support uniquement.
Parameters
- $user : User
-
Utilisateur ciblé, résolu depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token. - $entityManager : EntityManagerInterface
-
Gestionnaire d'entités.
- $mailerService : MailerService
-
Service d'envoi de l'email de désactivation.
Attributes
- #[Route]
- '/admin/users/{id}/deactivate'
- $name: 'app_user_deactivate'
- $methods: ['POST']
Return values
Response —Redirection vers app_user_list dans tous les cas.
deleteUser()
Supprime définitivement un compte utilisateur ainsi que ses données rattachées.
public
deleteUser(User $user, Request $request, EntityManagerInterface $entityManager) : Response
Après validation du jeton CSRF delete_user_<id>, quatre garde-fous bloquent la suppression
en affichant un flash d'erreur : l'administrateur ne peut pas supprimer son propre compte,
un compte portant ROLE_ADMIN est intouchable, et un compte possédant des commandes ou des
paiements associés est conservé pour préserver l'historique.
Si aucun blocage ne s'applique, les cartes de visite (BusinessCardAize via
getBusinessCardAizes()), les contacts et les abonnements de l'utilisateur sont marqués pour
suppression, l'action est journalisée, puis l'utilisateur lui-même est supprimé et le tout
est flushé en une seule transaction. Les fichiers déposés sur le disque (image de profil, CV,
QR codes) ne sont pas nettoyés ici.
Route : /admin/users/{id}/delete (POST), nom app_user_delete. Réservée à ROLE_ADMIN.
Parameters
- $user : User
-
Utilisateur ciblé, résolu depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token. - $entityManager : EntityManagerInterface
-
Gestionnaire d'entités.
Attributes
- #[IsGranted]
- 'ROLE_ADMIN'
- #[Route]
- '/admin/users/{id}/delete'
- $name: 'app_user_delete'
- $methods: ['POST']
Return values
Response —Redirection vers app_user_list dans tous les cas.
listsUsers()
Affiche la liste paginée des comptes utilisateurs, avec recherche.
public
listsUsers(Request $request, UserRepository $userRepository, PaginatorInterface $paginator) : Response
L'accès est refusé si l'utilisateur ne possède aucun des rôles ROLE_ADMIN, ROLE_MANAGER,
ROLE_OPERATOR ou ROLE_SUPPORT. Le terme de recherche q est interprété de deux façons : s'il
ne contient que des chiffres, il est traité comme un identifiant exact ; sinon il alimente un
LIKE sur l'email, le nom et le numéro de téléphone. Les comptes sont triés par identifiant
décroissant et paginés par 10.
Route : /admin/users-list (toutes méthodes), nom app_user_list.
Requiert ROLE_ADMIN, ROLE_MANAGER, ROLE_OPERATOR ou ROLE_SUPPORT.
Parameters
- $request : Request
-
Requête HTTP courante (paramètres
qetpage). - $userRepository : UserRepository
-
Dépôt des utilisateurs.
- $paginator : PaginatorInterface
-
Service de pagination KnpPaginator.
Attributes
- #[Route]
- '/admin/users-list'
- $name: 'app_user_list'
Return values
Response —Rendu du template admin/user/user-list.html.twig avec les comptes paginés
et le terme de recherche courant.
updateUser()
Modifie un compte utilisateur existant.
public
updateUser(User $user, Request $request, EntityManagerInterface $entityManager, UploaderService $uploaderService, UserPasswordHasherInterface $userPasswordHasher) : Response
Le formulaire expose un champ mot de passe facultatif ; l'option is_admin n'est pas
transmise ici, contrairement à UserController::addUser(). Une nouvelle image de profil
remplace l'ancienne référence (l'ancien fichier n'est pas supprimé du disque) et un mot de
passe renseigné est hashé, avec passage de mustChangePassword à true. Aucun champ lié à
l'entreprise n'est traité par cette action. La modification est journalisée après le flush.
Attention : le chemin de route ne comporte pas de séparateur avant le paramètre, l'URL
effective est donc de la forme /admin/users-update12.
Route : /admin/users-update{id} (toutes méthodes), nom app_user_update. Réservée à ROLE_ADMIN.
Parameters
- $user : User
-
Utilisateur résolu automatiquement depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, utilisée pour traiter le formulaire.
- $entityManager : EntityManagerInterface
-
Gestionnaire d'entités.
- $uploaderService : UploaderService
-
Service de dépôt de l'image de profil.
- $userPasswordHasher : UserPasswordHasherInterface
-
Service de hachage du mot de passe en clair.
Attributes
- #[IsGranted]
- 'ROLE_ADMIN'
- #[Route]
- '/admin/users-update{id}'
- $name: 'app_user_update'
Return values
Response —Rendu du template admin/user/update-user.html.twig, ou redirection vers
app_user_list après mise à jour réussie.