putty
(Derek Putnam)
1
Install this theme component
详细描述
在这些字段中使用敏感数据时要小心。字段不会出现在源代码中,但如果出现问题可能会被看到 
我有两个用户,derek_test(左)和 anon9(右)。ID 和 Company 字段都已在他们的个人资料中填充,但其中一个只能被另一个看到。derek_test 可以看到 ID,而 anon9 可以看到 Company。
用户个人资料
用户卡片
搜索
在这种情况下,anon9(右)可以看到公司并搜索 Acme。
设置

- 字段名称: 插入自定义用户字段的名称(每个对象一个)
- 允许的组: 从列表中选择允许的组
先决条件
这利用了 自定义用户字段。这些设置决定了字段的可见位置:
字段填充后,请重新检查这些设置,或提前创建权限,以免这些字段暴露。
6 个赞
Moin
2
未登录用户会看到什么?所以,如果该字段仅对管理员可见,那么我期望用户在注销后也无法看到它,对吗?
您选择使用文本字段来设置组而不是使用 group_list 有什么原因吗?输入组时,选择它们而不是键入名称会更方便一些。但是,它使用 ID 工作,因此您需要稍微更改代码。但即使您重命名了组,它仍然有效。
1 个赞
putty
(Derek Putnam)
3
说得好,我刚刚更新了它来处理这个问题。可以确认未登录用户看不到该字段。
我坦白说,这是用 Claude Code 完成的,但它说 group_list 类型在对象编辑器中不可用——只能作为顶级设置。
所以它必须是这样的,但可用字段的数量是固定的

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

我尝试了几种不同的转换,但都无法成功。结论是“对象模式中的 groups 类型有文档记录,但 UI 在前端并未实现。”
2 个赞
Moin
8
我也看到了那个错误,但在使用重置按钮重置了所有对象设置后,错误就没再出现 
现在一切都好了

也许它不喜欢在现有配置上更改设置类型
2 个赞
AirVetra
(Alexey Goloviznin)
10
您好,@putty!
我遇到了一些问题:
我需要向不在“User”组中的所有用户隐藏用户字段——这似乎是您的情况?
- 如果用户本身不在该组中,他/她自己的帐户也看不到这些字段——这样可以吗?
- 如果其他用户不是管理员或版主,他们将继续看不到这些字段!
- 顺便说一句,版主和管理员也应该在该组中才能看到被此主题隐藏的字段。
您能帮我解决这个问题吗?
putty
(Derek Putnam)
11
您好,Alexey,
您能详细说明一下吗?我看不到问题所在。它目前有 1 和 2。您的要求是也向版主/管理员隐藏字段吗?顺便说一句,管理员必须首先创建该字段。
AirVetra
(Alexey Goloviznin)
12
您好,谢谢!
我再次在本地最新的 GitHub 仓库和使用最新构建的托管解决方案上进行了测试——只有“管理员”类别受到影响,如果管理员是允许查看此字段的组成员,他/她可以看到“隐藏”字段。即使是版主访问权限(如我之前所想)也不起作用。
情况如下:
- 两个用户,admin(管理员)和 Alex_1
- 用户组 L2_verified
- 用户字段 - 完整姓名(对所有用户可见,全部开启,仅搜索关闭)
- 两个用户的姓名分别为:Alex Admin 和 Alex
- 主题设置:
在这些主题中包含组件(Foundation, Horizon)
字段名称:完整姓名
允许的组:L2_verified
结果:
- 两个用户都不是 L2_verified 组成员——没有人能看到“完整姓名”字段(甚至看不到自己的“完整姓名”)
- admin 是 L2_verified 组成员——可以看到 Alex_1 的“完整姓名”(以及自己的“完整姓名”)
- Alex_1 是 L2_verified 组成员——看不到自己的和 admin 的“完整姓名”
- 当我将 admin 授予 Alex_1 时——它可以同时看到自己的和 admin 的“完整姓名”
1 个赞
AirVetra
(Alexey Goloviznin)
14
我的 Antigravity with Gemini 3 Pro High 找到了根本原因:
已识别的根本原因: 组
L2_verified
存在,并且
Alex_1
是其成员,但是该组的可见性级别设置为 4(仅限员工/所有者)。
由于此限制性设置,Discourse 不会告知浏览器
Alex_1
是该组成员(除非他同时也是员工/管理员)。因此,主题组件会检查列表,找不到
L2_verified
,并保持字段隐藏。
修复方法:
-
转到 Groups → L2_verified → Manage → Interaction。
-
将 Who can see this group?(谁可以看到此组?)更改为 “Members”(成员)或 “Everyone”(所有人)。
-
保存。
-
刷新(以
Alex_1
(非管理员)身份)。现在应该可以工作了!
但这目前不是一个变通方法——我们的大多数组都对所有人隐藏:(
AirVetra
(Alexey Goloviznin)
15
您好 @dereklputnam,
感谢您提供的这个出色的组件!它是管理 Discourse 用户隐私的绝佳基础。
基于您的工作,我开发了一个专门的双向(互惠)可见性分支。在我们的专业社区中,我们需要一个“互信”模型,即经过验证的成员可以看到彼此的真实姓名/业务数据,但对普通公众或未经验证的用户完全保持匿名。
此分支的关键特性:
-
互惠逻辑: 仅当查看者和个人资料所有者都属于授权组时,才会显示某个字段。
-
员工监督: 管理员和版主出于安全和管理目的,保留完全的可见性。
-
自我可见性: 用户始终可以看到自己的隐藏字段,即使他们尚未属于授权组,以便他们可以管理自己的个人资料。
-
点对点隐私: 它确保即使是经过验证的用户,也不会向尚未经过同等程度验证的人透露其身份。
路线图: 在未来的更新中,我计划添加细粒度的组设置,以精确定义哪些组可以查看和被查看(例如,允许 A 组查看 B 组,反之亦然)。
我目前正在完善文档,并计划在获得主题组件类别的完全访问权限后,在单独的主题中将其发布为一个独立的“高级隐私”变体。
同时,如果有人需要这种双向逻辑,可以查看此处:GitHub: https://github.com/AirVetra/discourse-hidden-user-fields-bidirectional
再次感谢您的启发!
1 个赞