Restringir la exposición del nombre completo a ciertos grupos

Antecedentes
Estamos intentando configurar nuestro sitio para lograr un equilibrio entre el acceso abierto y las preocupaciones de privacidad:

  1. El sitio es público en general; los usuarios anónimos pueden navegar y los motores de búsqueda pueden indexarlo. Los nombres de usuario son públicos.
  2. Los nombres reales (nombre completo) y los perfiles se consideran semipúblicos; solo deben exponerse a otros miembros de la comunidad (no a rastreadores web ni a observadores anónimos).
  3. Las direcciones de correo electrónico se consideran completamente privadas; solo los administradores deben tener acceso a ellas (y el acceso se supervisa).

Discourse ya se encarga de (1) y (3) por defecto. (¡Genial!) Tenemos problemas para lograr (2).

Al deshabilitar “Mostrar nombre en las publicaciones” y habilitar “Ocultar perfiles de usuario al público”, obtenemos algo que parece un poco mejor, pero que no logra del todo (2). Los resultados de búsqueda de usuarios y las listas de destinatarios de insignias todavía muestran nombres completos (*). E incluso en lugares donde la interfaz de usuario no muestra los nombres completos, el servidor todavía los envía; por ejemplo, en el JSON de un tema recuperado, cada objeto de publicación todavía tiene poblado el “nombre” (¿y “nombre de usuario para mostrar”?).

Queremos hacer la promesa a nuestros usuarios de que “Tu nombre real solo se expone a otros miembros de la comunidad”, pero no podemos hacerlo si el servidor filtra nombres completos por todas partes.

Característica propuesta
¿Qué tal una configuración “Restringir la exposición del nombre completo a grupos”, con las siguientes propiedades:

  • El valor de la configuración es una lista de permitidos de grupos (con algún valor que signifique “todos, incluso usuarios anónimos”).
  • Si una consulta proviene de una sesión de cliente que coincide con la lista de permitidos, el servidor responde con nombres completos. De lo contrario, cualquier campo que contenga un nombre completo recibirá un valor nulo (o se omitirá del objeto, etc.).

Creo que eso se encargaría de nuestro (2), e incluso nos permitiría establecer el umbral para mostrar nombres reales en TL1 (en lugar de TL0).

Se me ocurre que lo que estoy pidiendo podría ser simplemente (:sonrojado:) una versión más detallada de la configuración existente “Habilitar nombres” (si deshabilitarla hace lo que promete en el lado del servidor y no expone nombres completos al cliente). Quizás eso haría que esto fuera muy fácil de implementar… :pensando:

¿Parece esta una característica plausible para el núcleo de Discourse?

(Alternativamente, ¿parece factible en un plugin? Preferiría verlo en el núcleo, pero también quiero poder abrir nuestro sitio al público).

(*: Evitar que los usuarios anónimos realicen búsquedas de usuarios y vean listas de destinatarios de insignias, y por lo tanto puedan obtener fácilmente una lista de todos nuestros usuarios, es un tema completamente diferente, para otro tema).

3 Me gusta

Seguimiento: He comenzado a trabajar en una implementación de esto. Mi enfoque básico es:

  • Añadir una nueva configuración del sitio, “Nombres completos visibles para grupos” (es decir, “grupos a los que es visible el nombre completo de cualquier usuario”).
  • Añadir un nuevo predicado can_see_full_names? a Guardian, que comprueba la configuración del sitio.
  • Reemplazar (muchas) instancias de SiteSetting.enable_names con el predicado can_see_full_names?.

Esto ha sido en su mayor parte sencillo — el mayor obstáculo ha sido que los serializadores no reenvían sus parámetros scope, y eso se ha convertido en su propio pequeño subproyecto.

2 Me gusta