EmployeeUserCreationService
in package
Crée et active les comptes utilisateurs des employés d'une entreprise cliente.
À partir d'une entité Employee, le service provisionne un User au rôle
ROLE_EMPLOYEE rattaché à l'entreprise, lui attribue un mot de passe temporaire à changer à la
première connexion et un code d'activation valable 24 heures, trace l'opération via
AuditLogger puis envoie l'e-mail d'activation par MailerService. Il expose
également la validation du code d'activation renvoyé par l'employé.
Table of Contents
Properties
- $auditLogger : AuditLogger
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
- $mailerService : MailerService
- $passwordHasher : UserPasswordHasherInterface
- $urlGenerator : UrlGeneratorInterface
Methods
- __construct() : mixed
- activateEmployeeAccount() : bool
- Active le compte d'un employé avec le code de vérification
- createUserAccountForEmployee() : User|null
- Crée un compte utilisateur pour un employé et envoie l'email d'activation
- isEmailAlreadyUsed() : bool
- Vérifie si un email est déjà utilisé par un autre utilisateur
- generateTemporaryPassword() : string
- Génère un mot de passe temporaire sécurisé
- generateVerificationCode() : string
- Génère un code de vérification à 6 chiffres
- sendActivationEmail() : bool
- Envoie l'email d'activation à l'employé
Properties
$auditLogger
private
AuditLogger
$auditLogger
$entityManager
private
EntityManagerInterface
$entityManager
$logger
private
LoggerInterface
$logger
$mailerService
private
MailerService
$mailerService
$passwordHasher
private
UserPasswordHasherInterface
$passwordHasher
$urlGenerator
private
UrlGeneratorInterface
$urlGenerator
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, UserPasswordHasherInterface $passwordHasher, UrlGeneratorInterface $urlGenerator, LoggerInterface $logger, MailerService $mailerService, AuditLogger $auditLogger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Recherche, persistance et flush des comptes utilisateurs.
- $passwordHasher : UserPasswordHasherInterface
-
Hachage du mot de passe temporaire.
- $urlGenerator : UrlGeneratorInterface
-
Génération de l'URL absolue d'activation.
- $logger : LoggerInterface
-
Journalisation des créations, activations et erreurs.
- $mailerService : MailerService
-
Envoi de l'e-mail d'activation.
- $auditLogger : AuditLogger
-
Traçabilité de la création et de l'activation du compte.
activateEmployeeAccount()
Active le compte d'un employé avec le code de vérification
public
activateEmployeeAccount(string $email, string $verificationCode) : bool
Recherche l'utilisateur par le couple e-mail + code de vérification : si aucun ne correspond,
ou si la date d'expiration du code est déjà dépassée, la méthode retourne false sans rien
modifier. Sinon le compte est marqué vérifié et activé, le code et son expiration sont
effacés pour empêcher toute réutilisation, les modifications sont flushées, une entrée
d'audit AuditLog::ACTION_USER_ACTIVATED est écrite et le succès est journalisé.
Effets de bord : écriture en base, écriture d'audit, journalisation. Toute exception est
capturée et journalisée en error sans être propagée.
Parameters
- $email : string
-
Adresse e-mail du compte à activer.
- $verificationCode : string
-
Code d'activation reçu par e-mail.
Return values
bool —true si le compte a été activé, false si le couple est inconnu, si le code
a expiré ou si une exception est survenue.
createUserAccountForEmployee()
Crée un compte utilisateur pour un employé et envoie l'email d'activation
public
createUserAccountForEmployee(Employee $employee) : User|null
Refuse la création (retour null avec avertissement journalisé) si l'employé n'a pas
d'adresse e-mail ou si un utilisateur porte déjà cette adresse. Sinon, instancie un
User reprenant l'e-mail, le nom complet, le téléphone, le poste et l'entreprise de
l'employé, avec le rôle unique ROLE_EMPLOYEE, non activé, non vérifié et avec
mustChangePassword à true. Un mot de passe temporaire de 12 caractères est généré puis
haché, et un code de vérification à six chiffres est stocké avec une expiration à 24 heures.
Le compte est persisté et flushé, une entrée d'audit AuditLog::ACTION_USER_CREATED est
écrite, puis l'e-mail d'activation est envoyé via
EmployeeUserCreationService::sendActivationEmail(). Un échec d'envoi est seulement
journalisé : le compte reste créé et est tout de même retourné.
Effets de bord : écriture en base, écriture d'audit, envoi d'e-mail, journalisation. Aucune transaction explicite n'encadre l'opération.
Toutes les exceptions sont capturées et journalisées en error ; la méthode n'en propage aucune.
Parameters
- $employee : Employee
-
Employé pour lequel provisionner un compte.
Return values
User|null —Compte créé, ou null si l'e-mail est manquant, déjà utilisé, ou si une
exception est survenue.
isEmailAlreadyUsed()
Vérifie si un email est déjà utilisé par un autre utilisateur
public
isEmailAlreadyUsed(string $email) : bool
Effectue une recherche exacte sur le champ email du dépôt User. Lecture seule, sans
effet de bord.
Parameters
- $email : string
-
Adresse e-mail à tester.
Return values
bool —true si un compte porte déjà cette adresse.
generateTemporaryPassword()
Génère un mot de passe temporaire sécurisé
private
generateTemporaryPassword() : string
Tire 12 caractères via random_int() dans un alphabet mêlant minuscules, majuscules,
chiffres et symboles !@#$%^&*. Aucune contrainte de composition n'est appliquée. Sans effet
de bord.
Tags
Return values
string —Mot de passe temporaire en clair, de 12 caractères.
generateVerificationCode()
Génère un code de vérification à 6 chiffres
private
generateVerificationCode() : string
Tire un entier entre 0 et 999999 puis le complète à gauche par des zéros sur six positions (contrairement à EmailVerificationService::generateVerificationCode(), la borne basse est ici zéro, d'où l'utilité du remplissage). Sans effet de bord.
Tags
Return values
string —Code numérique de six chiffres, éventuellement préfixé de zéros.
sendActivationEmail()
Envoie l'email d'activation à l'employé
private
sendActivationEmail(Employee $employee, User $user, string $temporaryPassword, string $verificationCode) : bool
Construit une URL absolue vers la route employee_account_activation paramétrée par le code
de vérification et l'adresse e-mail, puis envoie le template employee_activation avec
l'employé, son entreprise, le mot de passe temporaire en clair, l'URL d'activation et le
code. Le mot de passe temporaire transite donc par e-mail, d'où l'obligation de changement à
la première connexion.
Effets de bord : envoi d'e-mail et journalisation. Toute erreur, y compris de transport, est
capturée et journalisée en error sans être propagée.
Parameters
- $employee : Employee
-
Employé destinataire, transmis au template.
- $user : User
-
Compte créé, fournissant l'adresse e-mail et l'entreprise.
- $temporaryPassword : string
-
Mot de passe temporaire en clair inclus dans l'e-mail.
- $verificationCode : string
-
Code d'activation à six chiffres.
Return values
bool —true si l'e-mail a été remis au transport, false en cas d'erreur.