Restreindre l'exposition du nom complet à certains groupes

Contexte
Nous essayons de configurer notre site pour trouver un équilibre entre l’accès ouvert et les préoccupations relatives à la confidentialité :

  1. Le site est public dans l’ensemble ; les utilisateurs anonymes peuvent naviguer et les moteurs de recherche peuvent l’indexer. Les noms d’utilisateur sont publics.
  2. Les vrais noms (nom complet) et les profils sont considérés comme semi-publics ; ils ne devraient être exposés qu’aux autres membres de la communauté (pas aux robots d’exploration ni aux visiteurs anonymes).
  3. Les adresses e-mail sont considérées comme complètement privées ; seuls les administrateurs devraient y avoir accès (et l’accès est surveillé).

Discourse s’occupe déjà de (1) et (3) par défaut. (Hourra !) Nous avons du mal à réaliser (2).

En désactivant « Afficher le nom sur les publications » et en activant « Masquer les profils utilisateur au public », nous obtenons quelque chose qui semble un peu mieux, mais qui n’atteint pas tout à fait (2). Les résultats de recherche d’utilisateurs et les listes de destinataires de badges affichent toujours les vrais noms. (*) Et, même dans les endroits où l’interface utilisateur n’affiche pas les vrais noms, le serveur les envoie toujours — par exemple, dans le JSON d’un sujet récupéré, chaque objet de publication a toujours le champ « name » (et « display_username » ?) rempli.

Nous voulons faire la promesse à nos utilisateurs que « Votre vrai nom n’est exposé qu’aux autres membres de la communauté », mais nous ne pouvons pas le faire si le serveur divulgue les vrais noms partout.

Fonctionnalité proposée
Que diriez-vous d’un paramètre « Restreindre l’exposition du vrai nom aux groupes », avec les propriétés suivantes :

  • La valeur du paramètre est une liste blanche de groupes (avec une valeur signifiant « tout le monde, même les utilisateurs anonymes »).
  • Si une requête provient d’une session client qui correspond à la liste blanche, le serveur répond avec les vrais noms. Sinon, tout champ qui porterait un vrai nom reçoit une valeur nulle (ou est omis de l’objet, etc.)

Je pense que cela réglerait notre problème (2) — et nous permettrait même de définir le seuil d’affichage des vrais noms à TL1 (par rapport à TL0).

Il me vient à l’esprit que ce que je demande pourrait simplement ( :blush: ) être une version plus granulaire du paramètre existant « Activer les noms » (si sa désactivation fait ce qu’elle promet côté serveur et n’expose pas les vrais noms au client). Peut-être que cela rendrait l’implémentation très facile… :thinking:

Cela semble-t-il être une fonctionnalité plausible pour le cœur de Discourse ?

(Alternativement, cela semble-t-il réalisable dans un plugin ? Je préférerais le voir dans le cœur, mais je veux aussi pouvoir ouvrir réellement notre site au public).

(* : Empêcher les utilisateurs anonymes d’effectuer des recherches d’utilisateurs et de consulter les listes de destinataires de badges — et ainsi de pouvoir récupérer trivialement une liste de tous nos utilisateurs — est un tout autre sujet, pour un autre sujet.)

3 « J'aime »

Suivi : J’ai commencé à travailler sur une implémentation de ceci. Mon approche de base est :

  • Ajouter un nouveau paramètre de site, « Noms complets visibles par les groupes » (c’est-à-dire « groupes auxquels le nom complet de n’importe quel utilisateur est visible »).
  • Ajouter un nouveau prédicat can_see_full_names? à Guardian, qui vérifie par rapport au paramètre du site.
  • Remplacer (de nombreuses) instances de SiteSetting.enable_names par le prédicat can_see_full_names?.

Cela a été relativement simple — le plus gros obstacle a été que les sérialiseurs ne transmettaient pas leurs paramètres scope, et cela s’est transformé en son propre petit sous-projet.

2 « J'aime »