'hashed', 'DateInscription' => 'datetime', ]; // Utiliser Email comme authentifiant public function getAuthIdentifierName() { return 'Email'; } // Utiliser MotDePasse comme mot de passe public function getAuthPassword() { return $this->MotDePasse; } // Relation avec Role public function role() { return $this->belongsTo(Role::class, 'ID_Role', 'ID_Role'); } // Relation avec Ressources créées public function ressourcesCreees() { return $this->hasMany(Ressource::class, 'ID_Utilisateur_Createur', 'ID_Utilisateur'); } // Relation avec Commentaires public function commentaires() { return $this->hasMany(Commentaire::class, 'ID_Utilisateur', 'ID_Utilisateur'); } // Relation avec Activites hôtées public function activitesHotees() { return $this->hasMany(Activite::class, 'ID_Utilisateur_Hote', 'ID_Utilisateur'); } // Relation avec Progressions public function progressions() { return $this->hasMany(Utilisateur_Progression::class, 'ID_Utilisateur', 'ID_Utilisateur'); } /** * Anonymise le compte (droit à l'effacement RGPD). * * Les données personnelles identifiantes (e-mail, pseudo, mot de passe) * sont remplacées par des valeurs neutres et non réversibles, tandis que * les contributions liées (ressources, commentaires) restent en base sous * une forme anonyme afin de préserver l'intégrité référentielle. */ public function anonymiser(): void { $this->Email = 'anonyme_'.$this->ID_Utilisateur.'@anonymise.local'; $this->Pseudo = 'Utilisateur supprimé'; $this->MotDePasse = bin2hex(random_bytes(32)); // mot de passe non utilisable $this->Statut = 'Inactif'; // compte désactivé (valeur de l'enum Statut) $this->save(); } }