Liste noire des e-mails – Question sur la suppression/désactivation en masse

Une fois les domaines mis sur liste noire, les comptes qui ont déjà été validés restent inchangés et peuvent toujours être utilisés.

Je voudrais savoir si quelqu’un connaît une méthode pour détruire en masse (supprimer l’utilisateur et tout son contenu), suspendre ou mettre en sourdine des utilisateurs en fonction de leur domaine d’adresse e-mail d’inscription ?

Dans mon cas, cela permettrait de supprimer ou de désactiver des centaines de milliers de comptes qui ont utilisé la technique du domaine catch-all pour s’inscrire.

S’agissait-il de données migrées ? Supprimer autant de comptes sera très, très douloureux — à moins qu’ils n’aient presque aucun contenu.

Vous pouvez le faire depuis la console Rails, mais cela semble pouvoir être très désordonné.

@codinghorror - Ce ne sont pas des données migrées. Je n’ai pas d’objection à ce que ce soit douloureux et lent, car l’alternative de laisser les comptes en l’état serait probablement pire :hot_face: En ce qui concerne la quantité de contenu, c’est un mélange : certains n’en ont aucun (généralement les spammeurs prévoient d’utiliser ces comptes plus tard), d’autres en ont un minimum, et d’autres encore en ont des quantités massives.

@pfaffman Super ! Sais-tu comment faire ? Haha :pray:

Avez-vous envisagé d’anonymiser les utilisateurs ?

@fzngagan Cela pourrait être une solution solide. Savez-vous s’il existe un moyen de le faire en masse ?

Oui. Cela peut être fait depuis la console Rails. Mais la question est : selon quels critères souhaitez-vous les anonymiser ?

@fzngagan Super ! Les critères seraient tous les e-mails utilisant un domaine spécifique dans leur adresse d’inscription. Par exemple : example@blacklisted.com, example2@blacklisted.com

Dans la console Rails, saisissez ces commandes et vérifiez si elles donnent les résultats attendus (remplacez votre motif d’adresse e-mail par ‘@gmail.com’)

idlist = UserEmail.where("email like '%@gmail.com'").pluck(:user_id)
users = User.find(idlist)

puis (procédez avec prudence)

system_user = Discourse.system_user
users.each do |user|
  UserAnonymizer.new(user, system_user).make_anonymous
end

Je ne suis pas expert en matière de performances, je ne sais donc pas exactement ce qui se passerait si le nombre d’utilisateurs était important.

@fzngagan Wow, super, merci beaucoup ! :slight_smile: Je l’apprécie vraiment.

Je m’assurerai que tout est récemment sauvegardé avant de tenter l’expérience.

Une petite question : sais-tu s’il est possible de mettre en silence en masse les utilisateurs (définitivement) en utilisant cette technique ?

Oui. La console Rails peut faire presque tout ce qui peut être fait via le code.