限制将全名曝光给特定群体

背景
我们正试图在开放访问和隐私问题之间取得平衡来设置我们的网站:

  1. 网站整体是公开的;匿名用户可以浏览,搜索引擎可以索引。用户名是公开的。
  2. 真名(全名)和个人资料被认为是半公开的;它们应该只对其他社区成员公开(不对网络爬虫或匿名潜水者公开)。
  3. 电子邮件地址被认为是完全私密的;只有管理员应该能够访问它们(并且访问是受监控的)。

Discourse 默认已经处理了 (1) 和 (3)。 (太棒了!)我们在实现 (2) 方面遇到了麻烦。

通过禁用“在帖子中显示姓名”并启用“向公众隐藏用户个人资料”,我们得到了一些似乎有所改善但并未完全实现 (2) 的结果。用户搜索结果和徽章接收者列表仍然显示全名。(*) 即使在 UI 不显示全名的位置,服务器仍在发送它们——例如,在获取主题的 JSON 中,每个帖子对象仍然填充了“name”(和“display_username”?)。

我们想向用户兑现“您的真名仅对其他社区成员公开”的承诺,但如果服务器到处泄露全名,我们就无法做到这一点。

提议的功能
是否可以添加一个“限制全名暴露给群组”的设置,并具有以下属性:

  • 设置值为允许的群组列表(其中某个值表示“所有人,包括匿名用户”)。
  • 如果查询来自与允许列表匹配的客户端会话,则服务器将响应全名。否则,任何会显示全名的字段都将获得一个 null 值(或从对象中删除等)。

我认为这将解决我们的 (2) 问题——甚至可以让我们将显示真名的门槛设置在 TL1(而不是 TL0)。

我想到,我所要求的可能只是(:blush:)现有“启用姓名”设置的一个更细粒度的版本(如果禁用该设置能在服务器端兑现其承诺,并且不向客户端公开全名)。也许这会让实现变得非常容易…… :thinking:

这似乎是 Discourse 核心的一个可行功能吗?

(或者,它似乎可以通过插件实现吗?我更希望它在核心中,但我也想能够真正向公众开放我们的网站。)

(*: 防止匿名用户进行用户搜索和查看徽章接收者列表——从而可以轻易获取我们所有用户的列表——这是一个完全不同的主题,留待另一个主题讨论。)

3 个赞

跟进:我已开始着手实现此功能。我的基本方法是:

  • 添加一个新的站点设置,“对群组可见的姓名”(即,“任何用户的全名可见的群组”)。
  • Guardian 添加一个新的 can_see_full_names? 断言,该断言会检查站点设置。
  • 将(许多)SiteSetting.enable_names 的实例替换为 can_see_full_names? 断言。

这大部分都很直接——最大的障碍是序列化器没有转发它们的 scope 参数,这已经变成了一个小项目。

2 个赞