Begrenzen Sie die Offenlegung des vollständigen Namens auf bestimmte Gruppen

Hintergrund
Wir versuchen, unsere Website so einzurichten, dass sie ein Gleichgewicht zwischen offenem Zugang und Datenschutzbedenken herstellt:

  1. Die Website ist insgesamt öffentlich; anonyme Benutzer können sie durchsuchen und Suchmaschinen können sie indizieren. Benutzernamen sind öffentlich.
  2. Echte Namen (vollständiger Name) und Profile gelten als semi-öffentlich; sie sollten nur anderen Community-Mitgliedern zugänglich sein (nicht für Webcrawler oder anonyme Spanner).
  3. E-Mail-Adressen gelten als völlig privat; nur Administratoren sollten Zugriff darauf haben (und der Zugriff wird überwacht).

Discourse kümmert sich bereits standardmäßig um (1) und (3). (Juhu!) Wir haben Schwierigkeiten, (2) zu erreichen.

Durch Deaktivieren von “Anzeigename in Beiträgen” und Aktivieren von “Benutzerprofile vor der Öffentlichkeit verbergen” erhalten wir etwas, das besser zu sein scheint, aber (2) nicht ganz erreicht. Benutzersuchergebnisse und Listen von Auszeichnungsempfängern zeigen immer noch vollständige Namen an (*). Und selbst an Stellen, an denen die Benutzeroberfläche die vollständigen Namen nicht anzeigt, sendet der Server sie immer noch — z. B. im JSON für ein abgerufenes Thema hat jedes Beitrags-Objekt immer noch den “Namen” (und “display_username”?) ausgefüllt.

Wir möchten unseren Benutzern das Versprechen geben, dass “Ihr echter Name nur anderen Community-Mitgliedern zugänglich ist”, aber wir können das nicht tun, wenn der Server überall vollständige Namen preisgibt.

Vorgeschlagene Funktion
Wie wäre es mit einer Einstellung “Vollständige Namensanzeige auf Gruppen beschränken” mit den folgenden Eigenschaften:

  • Der Einstellungswert ist eine Whitelist von Gruppen (mit einem Wert, der “jeder, auch anonyme Benutzer” bedeutet).
  • Wenn eine Abfrage von einer Clientsitzung kommt, die mit der Whitelist übereinstimmt, antwortet der Server mit vollständigen Namen. Andernfalls erhält jedes Feld, das einen vollständigen Namen tragen würde, einen Nullwert (oder wird aus dem Objekt weggelassen usw.)

Ich denke, das würde unser (2) abdecken — und es würde uns sogar erlauben, die Messlatte für die Anzeige echter Namen auf TL1 (gegenüber TL0) zu legen.

Mir fällt auf, dass das, wonach ich frage, vielleicht(:blush:) einfach eine feingranularere Version der vorhandenen Einstellung “Namen anzeigen” ist (wenn das Deaktivieren davon das verspricht, was es auf Serverseite verspricht, und keine vollständigen Namen an den Client weitergibt). Vielleicht wäre das sehr einfach zu implementieren… :thinking:

Scheint dies eine plausible Funktion für den Discourse-Kern zu sein?

(Alternativ scheint es in einem Plugin erreichbar zu sein? Ich würde es lieber im Kern sehen, aber ich möchte auch in der Lage sein, unsere Website tatsächlich für die Öffentlichkeit zugänglich zu machen.)

(*: Anonymen Benutzern das Verhindern von Benutzersuchen und das Anzeigen von Listen von Auszeichnungsempfängern — und damit die Möglichkeit, eine Liste aller unserer Benutzer trivial zu erhalten — ist ein ganz anderes Thema, für ein anderes Thema.)

3 „Gefällt mir“

Nachverfolgung: Ich habe mit der Implementierung begonnen. Mein grundlegender Ansatz ist:

  • Eine neue Website-Einstellung hinzufügen: „Vollständige Namen für Gruppen sichtbar“ (d. h. „Gruppen, für die der vollständige Name eines Benutzers sichtbar ist“).
  • Ein neues can_see_full_names?-Prädikat zu Guardian hinzufügen, das gegen die Website-Einstellung prüft.
  • (Viele) Instanzen von SiteSetting.enable_names durch das can_see_full_names?-Prädikat ersetzen.

Dies war größtenteils unkompliziert – die größte Hürde waren Serializer, die ihre scope-Parameter nicht weiterleiteten, und das ist zu einem eigenen kleinen Teilprojekt geworden.

2 „Gefällt mir“