BCard - Documentation technique

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

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 q et page).

$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.


        
On this page

Search results