Restringir a exposição do nome completo a certos grupos

Contexto
Estamos tentando configurar nosso site para equilibrar o acesso aberto e as preocupações com a privacidade:

  1. O site é público em geral; usuários anônimos podem navegar e os mecanismos de busca podem indexá-lo. Nomes de usuário são públicos.
  2. Nomes reais (nome completo) e perfis são considerados semi-públicos; eles devem ser expostos apenas a outros membros da comunidade (não a rastreadores da web ou espreitadores anônimos).
  3. Endereços de e-mail são considerados completamente privados; apenas administradores devem ter acesso a eles (e o acesso é monitorado).

O Discourse já cuida de (1) e (3) por padrão. (Uhuu!) Estamos tendo problemas para alcançar (2).

Ao desabilitar “Exibir nome em postagens” e habilitar “Ocultar perfis de usuário do público”, obtemos algo que parece um pouco melhor, mas não atinge totalmente (2). Os resultados de pesquisa de usuários e as listas de destinatários de selos ainda exibem nomes completos.(*) E, mesmo em locais onde a interface do usuário não exibe os nomes completos, o servidor ainda os está enviando — por exemplo, no JSON de um tópico buscado, cada objeto de postagem ainda tem o “name” (e “display_username”?) preenchido.

Queremos fazer a promessa aos nossos usuários de que “Seu nome real só é exposto a outros membros da comunidade”, mas não podemos fazer isso se o servidor estiver vazando nomes completos em todos os lugares.

Recurso Proposto
Que tal uma configuração “Restringir exposição de nome completo a grupos”, com as seguintes propriedades:

  • O valor da configuração é uma lista de permissões de grupos (com algum valor que signifique “todos, até mesmo usuários anônimos”).
  • Se uma consulta vier de uma sessão de cliente que corresponda à lista de permissões, o servidor responderá com nomes completos. Caso contrário, qualquer campo que deveria conter um nome completo receberá um valor nulo (ou será omitido do objeto, etc.)

Acho que isso cuidaria do nosso (2) — e até nos permitiria definir o limite para exibir nomes reais em TL1 (em vez de TL0).

Ocorreu-me que o que estou pedindo pode ser(:corar:) simplesmente uma versão mais granular da configuração existente “Habilitar nomes” (se desabilitá-la fizer o que promete no lado do servidor e não expor nomes completos ao cliente). Talvez isso torne a implementação muito fácil… :pensando:

Isso parece um recurso plausível para o núcleo do Discourse?

(Alternativamente, parece alcançável em um plugin? Eu preferiria vê-lo no núcleo, mas também quero poder realmente abrir nosso site ao público).

(*: Impedir que usuários anônimos realizem pesquisas de usuários e visualizem listas de destinatários de selos — e, assim, consigam obter trivialmente uma lista de todos os nossos usuários — é um tópico totalmente diferente, para um Tópico diferente.)

3 curtidas

Acompanhamento: Comecei a trabalhar em uma implementação disso. Minha abordagem básica é:

  • Adicionar uma nova configuração do site, “Nomes completos visíveis para grupos” (ou seja, “grupos para os quais o nome completo de qualquer usuário é visível”).
  • Adicionar um novo predicado can_see_full_names? ao Guardian, que verifica a configuração do site.
  • Substituir (muitas) instâncias de SiteSetting.enable_names pelo predicado can_see_full_names?.

Isso tem sido bastante simples — o maior obstáculo tem sido os serializadores não encaminharem seus parâmetros de scope, e isso se tornou seu próprio pequeno subprojeto.

2 curtidas