隐藏的用户字段

:information_source: 摘要 创建仅对指定组可见的用户字段
:hammer_and_wrench: 存储库 discourse-hidden-user-fields
:question: 安装指南 如何安装主题或主题组件
:open_book: 不熟悉 Discourse 主题? Discourse 主题使用入门指南

Install this theme component

详细描述

:warning: 在这些字段中使用敏感数据时要小心。字段不会出现在源代码中,但如果出现问题可能会被看到 :warning:

我有两个用户,derek_test(左)和 anon9(右)。ID 和 Company 字段都已在他们的个人资料中填充,但其中一个只能被另一个看到。derek_test 可以看到 ID,而 anon9 可以看到 Company

用户个人资料

用户卡片

搜索

在这种情况下,anon9(右)可以看到公司并搜索 Acme。


设置

CleanShot 2025-11-13 at 16.17.43

  • 字段名称: 插入自定义用户字段的名称(每个对象一个)
  • 允许的组: 从列表中选择允许的组

先决条件

这利用了 自定义用户字段。这些设置决定了字段的可见位置:

:white_check_mark: 字段填充后,请重新检查这些设置,或提前创建权限,以免这些字段暴露。

6 个赞

未登录用户会看到什么?所以,如果该字段仅对管理员可见,那么我期望用户在注销后也无法看到它,对吗?


您选择使用文本字段来设置组而不是使用 group_list 有什么原因吗?输入组时,选择它们而不是键入名称会更方便一些。但是,它使用 ID 工作,因此您需要稍微更改代码。但即使您重命名了组,它仍然有效。

1 个赞

说得好,我刚刚更新了它来处理这个问题。可以确认未登录用户看不到该字段。

我坦白说,这是用 Claude Code 完成的,但它说 group_list 类型在对象编辑器中不可用——只能作为顶级设置。

所以它必须是这样的,但可用字段的数量是固定的

CleanShot 2025-11-13 at 13.12.21

1 个赞

这很有意思。根据文档,我也期望它能支持类似的功能

2 个赞

感谢您指出这一点!我已根据该文档修改了组设置!

我将更新上面的详细信息以反映此更改。

2 个赞

嗯……虽然对象编辑器中的设置接受了 list_type:group,但我还是无法绕过一个错误:

CleanShot 2025-11-13 at 13.52.29

我尝试了几种不同的转换,但都无法成功。结论是“对象模式中的 groups 类型有文档记录,但 UI 在前端并未实现。”

2 个赞

我也看到了那个错误,但在使用重置按钮重置了所有对象设置后,错误就没再出现 :woman_shrugging:

现在一切都好了
Screenshot_20251113_195748_Firefox

也许它不喜欢在现有配置上更改设置类型

2 个赞

我觉得这会很有用!

1 个赞

您好,@putty

我遇到了一些问题:

我需要向不在“User”组中的所有用户隐藏用户字段——这似乎是您的情况?

  1. 如果用户本身不在该组中,他/她自己的帐户也看不到这些字段——这样可以吗?
  2. 如果其他用户不是管理员或版主,他们将继续看不到这些字段!
  3. 顺便说一句,版主和管理员也应该在该组中才能看到被此主题隐藏的字段。

您能帮我解决这个问题吗?

您好,Alexey,

您能详细说明一下吗?我看不到问题所在。它目前有 1 和 2。您的要求是也向版主/管理员隐藏字段吗?顺便说一句,管理员必须首先创建该字段。

您好,谢谢!

我再次在本地最新的 GitHub 仓库和使用最新构建的托管解决方案上进行了测试——只有“管理员”类别受到影响,如果管理员是允许查看此字段的组成员,他/她可以看到“隐藏”字段。即使是版主访问权限(如我之前所想)也不起作用。

情况如下:

  1. 两个用户,admin(管理员)和 Alex_1
  2. 用户组 L2_verified
  3. 用户字段 - 完整姓名(对所有用户可见,全部开启,仅搜索关闭)
  4. 两个用户的姓名分别为:Alex Admin 和 Alex
  5. 主题设置:
    在这些主题中包含组件(Foundation, Horizon)
    字段名称:完整姓名
    允许的组:L2_verified

结果:

  1. 两个用户都不是 L2_verified 组成员——没有人能看到“完整姓名”字段(甚至看不到自己的“完整姓名”)
  2. admin 是 L2_verified 组成员——可以看到 Alex_1 的“完整姓名”(以及自己的“完整姓名”)
  3. Alex_1 是 L2_verified 组成员——看不到自己的和 admin 的“完整姓名”
  4. 当我将 admin 授予 Alex_1 时——它可以同时看到自己的和 admin 的“完整姓名”
1 个赞

所以……听起来我们没事了?哈哈 :sweat_smile:

1 个赞

我的 Antigravity with Gemini 3 Pro High 找到了根本原因:

已识别的根本原因:

L2_verified

存在,并且

Alex_1

是其成员,但是该组的可见性级别设置为 4(仅限员工/所有者)。

由于此限制性设置,Discourse 不会告知浏览器

Alex_1

是该组成员(除非他同时也是员工/管理员)。因此,主题组件会检查列表,找不到

L2_verified

,并保持字段隐藏。

修复方法:

  1. 转到 GroupsL2_verifiedManageInteraction

  2. Who can see this group?(谁可以看到此组?)更改为 “Members”(成员)或 “Everyone”(所有人)。

  3. 保存。

  4. 刷新(以

Alex_1

(非管理员)身份)。现在应该可以工作了!

但这目前不是一个变通方法——我们的大多数组都对所有人隐藏:(

您好 @dereklputnam

感谢您提供的这个出色的组件!它是管理 Discourse 用户隐私的绝佳基础。

基于您的工作,我开发了一个专门的双向(互惠)可见性分支。在我们的专业社区中,我们需要一个“互信”模型,即经过验证的成员可以看到彼此的真实姓名/业务数据,但对普通公众或未经验证的用户完全保持匿名。

此分支的关键特性:

  • 互惠逻辑: 仅当查看者和个人资料所有者都属于授权组时,才会显示某个字段。

  • 员工监督: 管理员和版主出于安全和管理目的,保留完全的可见性。

  • 自我可见性: 用户始终可以看到自己的隐藏字段,即使他们尚未属于授权组,以便他们可以管理自己的个人资料。

  • 点对点隐私: 它确保即使是经过验证的用户,也不会向尚未经过同等程度验证的人透露其身份。

路线图: 在未来的更新中,我计划添加细粒度的组设置,以精确定义哪些组可以查看和被查看(例如,允许 A 组查看 B 组,反之亦然)。

我目前正在完善文档,并计划在获得主题组件类别的完全访问权限后,在单独的主题中将其发布为一个独立的“高级隐私”变体。

同时,如果有人需要这种双向逻辑,可以查看此处:GitHub: https://github.com/AirVetra/discourse-hidden-user-fields-bidirectional

再次感谢您的启发!

1 个赞