AccountDeletionService
in package
Gère la suppression « RGPD » d'un compte utilisateur par anonymisation.
Le service orchestre, dans une transaction Doctrine unique, la trace d'audit, l'anonymisation de l'entité User, la suppression physique de ses cartes de visite et de ses contacts, puis l'anonymisation de ses commandes (conservées pour la comptabilité). Il notifie ensuite l'utilisateur et les administrateurs par e-mail via MailerService et invalide le token de sécurité courant afin de déconnecter la session. Utilisé depuis l'espace « Mon compte ».
Table of Contents
Properties
- $auditLogger : AuditLogger
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
- $mailerService : MailerService
- $tokenStorage : TokenStorageInterface
- $userRepository : UserRepository
Methods
- __construct() : mixed
- deleteAccount() : void
- Supprime (anonymise) un compte utilisateur.
- sendDeletionEmails() : void
- Notifie l'utilisateur supprimé et l'ensemble des administrateurs par e-mail.
Properties
$auditLogger
private
AuditLogger
$auditLogger
$entityManager
private
EntityManagerInterface
$entityManager
$logger
private
LoggerInterface
$logger
$mailerService
private
MailerService
$mailerService
$tokenStorage
private
TokenStorageInterface
$tokenStorage
$userRepository
private
UserRepository
$userRepository
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, MailerService $mailerService, LoggerInterface $logger, TokenStorageInterface $tokenStorage, UserRepository $userRepository, AuditLogger $auditLogger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestion de la transaction, des suppressions et du flush.
- $mailerService : MailerService
-
Envoi des e-mails de confirmation de suppression.
- $logger : LoggerInterface
-
Journalisation des succès et des échecs de suppression.
- $tokenStorage : TokenStorageInterface
-
Invalidation du token de sécurité (déconnexion immédiate).
- $userRepository : UserRepository
-
Recherche des administrateurs à notifier.
- $auditLogger : AuditLogger
-
Écriture de la trace d'audit avant anonymisation.
deleteAccount()
Supprime (anonymise) un compte utilisateur.
public
deleteAccount(User $user) : void
Refuse d'emblée les comptes portant l'un des rôles protégés ROLE_ADMIN, ROLE_SUPPORT
ou ROLE_OPERATOR. Mémorise l'e-mail et le nom d'origine, puis ouvre une transaction dans
laquelle il : écrit une entrée d'audit AuditLog::ACTION_USER_DELETED contenant ces valeurs
d'origine, appelle User::anonymize(), supprime toutes les cartes de visite de l'utilisateur
(en détachant au préalable l'employé associé), supprime tous ses contacts, et remplace les
données nominatives de chacune de ses commandes par des valeurs neutres
(Inconnu, deleted@bcard.binn, note « Utilisateur supprimé »). Après le commit, envoie
les e-mails de notification via AccountDeletionService::sendDeletionEmails() puis
vide le token de sécurité, ce qui déconnecte l'utilisateur courant.
Effets de bord : transaction + flush en base, suppressions définitives, envoi d'e-mails, invalidation de la session de sécurité, écriture de logs.
En cas d'erreur, la transaction est annulée (si encore active), l'échec est journalisé
en niveau error et l'exception est relancée telle quelle.
Parameters
- $user : User
-
Utilisateur à anonymiser ; ses cartes, contacts et commandes sont traités en cascade.
Tags
sendDeletionEmails()
Notifie l'utilisateur supprimé et l'ensemble des administrateurs par e-mail.
private
sendDeletionEmails(string $userEmail, string $userName) : void
Envoie d'abord un e-mail de confirmation à l'ancienne adresse de l'utilisateur
(template account_deleted_user), puis récupère via une requête DQL tous les comptes dont
la colonne roles contient ROLE_ADMIN et leur envoie un e-mail d'information
(template account_deleted_admin) mentionnant le nom et l'e-mail d'origine.
Les échecs sont volontairement absorbés : toute exception est journalisée en niveau
warning et n'interrompt pas la suppression du compte déjà validée en base.
Parameters
- $userEmail : string
-
Adresse e-mail d'origine, avant anonymisation.
- $userName : string
-
Nom d'origine, avant anonymisation.