私人主题插件

:information_source: 摘要 私有主题 在常规类别中启用私有主题
:hammer_and_wrench: 代码库链接 GitHub - communiteq/discourse-private-topics
:open_book: 安装指南 如何在 Discourse 中安装插件

功能

此插件允许您为类别添加额外的安全设置,以便用户只能访问他们自己的主题。您还可以指定一个或多个可以查看类别中所有主题的组。这通常用于在公共社区中提供私有支持。

基本原理

我们正在寻找一种更集成的方式来为 Communiteq 的客户提供支持,而无需创建数千个类别。我们还希望避免使用群组收件箱,因为它们感觉过于生硬,并且默认情况下,每当有人在任何群组收件箱中发帖时,您都会收到一个“新 PM”气泡。

我之前在这里写过关于这个想法。

配置

启用插件后,转到类别的安全设置。

:warning: 确保它不被“所有人”访问:warning:
如果它必须被广泛访问,请将其设置为 trust_level_0

设置

还有一些全局站点设置:

  • private topics permitted groups:指定其成员的帖子始终可访问的组。您可以使用此设置,以便工作人员或支持人员的帖子不会受到无法访问的影响,即使他们在私有类别中。默认系统用户的帖子也始终显示。如果您希望显示类别介绍性帖子,则应确保这些帖子来自默认系统用户或此组中的用户。

  • private topics admin sees all:启用后,管理员用户可以访问所有主题,即使它们在私有类别中。如果想避免意外查看机密数据,请禁用此选项。

注意事项

该插件会过滤主题列表、帖子流、搜索、用户摘要、用户活动、未找到页面、关注通知和原始数据中的主题。

主题包含在徽章中,但徽章不会授予非公共类别的徽章,因此您应该从类别安全组中删除 everyone,而是添加 trust_level_1

此插件是全新的,尚未经过广泛测试。
可能的“泄露”包括:

  • 消息总线(有时会闪烁“有一个新主题或更新的主题”,然后消失)

待办事项/路线图

  • 添加一个类别横幅,解释在该类别中发布或多或少机密的内容是安全的。
45 个赞

理查德,干得漂亮!

2 个赞

哇,太棒了。干得好!

3 个赞

一个小小的观察——似乎即使是管理员也无法看到这些回复,除非在组中指定了staffadmins。这是故意的吗?

我刚刚创建了两个测试类别,一个指定了管理员组,另一个没有。将主题从一个类别移动到另一个类别意味着我失去了对该主题的可见性。不过,主题名称会通过“删除类别”按钮泄露,该按钮会显示并命名仍然存在的主题,从而阻止删除。

1 个赞

是的,我确实故意没有在任何特殊情况下对待 admin(秉承这个这个 的精神),因为添加组很容易,而且在测试时管理员受到常规安全规则的约束确实很有帮助。

另一方面,我也没费心去关闭管理员用户的任何“漏洞”,尤其是因为它可能在管理论坛时引起问题。

不过这是一个很好的评论,我会在这个主题的起始帖中明确说明。

2 个赞

在类别视图中是否有办法向管理员列出主题,即使名称被隐藏?

请详细说明?我不确定是否明白你的意思。

默认情况下,管理员看不到某些内容是相当史无前例的。

如果您不希望在管理员组未被明确命名时显示这些主题,我们是否至少可以在主题视图中包含一些内容,告知他们存在他们无法看到但私人主题?这可以是任何内容,从在主题列表中显示主题名称但阻止打开主题本身(后者是现在的情况,链接只是不起作用),到在类别顶部包含一个通知,告知管理员已启用私人主题,但他们目前没有权限查看它们。

1 个赞

我明白了,谢谢你的解释。

我将在下周初添加一个站点设置,该设置将跳过所有管理员用户的过滤器。

我添加了一个 private topics permitted groups(私有话题允许群组)设置,用于指定成员帖子始终可见的群组。你可以使用此设置,使来自员工或支持人员的帖子不会被隐藏,即使他们身处私有分类中。来自默认系统用户的帖子也始终显示。你应该确保分类介绍性帖子要么来自默认系统用户,要么来自此群组中的用户。

我还添加了管理员可以看到所有内容的默认功能。要恢复到旧行为,你可以关闭 private topics admin sees all(私有话题管理员可见所有)。@stephen

1 个赞

非常感谢您提供的这个插件 @RGJ - 它对我们的社区将非常有帮助。

如果我理解正确的话;用户也可以在这个类别中创建包含机密信息的帖子,是吗?

1 个赞

它的设计目的是提供与群组收件箱相同的保密级别,即只有主题作者和定义的群组才能访问其管理下的主题,外加管理员以及任何能够(已获得)数据库访问权限的人员。

请注意,该插件已有 4 天历史,仍被标记为“beta”版本,因此尚未经过广泛的实际测试。

也许我应该悬赏它,以便我们能更快地将其提升到实战测试级别:找到绕过它并能作为未经授权的普通用户访问主题的人,将获得两个月免费的 Communiteq 托管服务。部分泄露(如主题标题)可获得一个月。

5 个赞

到目前为止,我只看到(而且非常轻微)的是在用户个人资料摘要中,您可以通过“热门类别”看到用户已在其中一个类别中创建了主题。类别或计数的链接都不会显示主题。

编辑:实际上我确实找到了一个,但它是通过一个官方插件而不是核心功能实现的。discourse-follow 会泄露私有主题的标题和 URL。

2 个赞

谢谢!!!
现在已经处理好了。

2 个赞

我发现了另外两个与此相关的标题/URL泄露。

步骤如下:

  • 用户 1 在另一个类别中创建了一个主题,用户 2 与之互动,这将该主题设置为“已关注”。
  • 主题被移至“私有主题”类别。
  • 主题出现进一步活动,尽管用户 2 无法访问,但仍触发了对用户 2 的主题通知。(泄露 a,轻微)
  • 通知导致用户 2 看到“哎呀!该页面不存在或为私有。”,并在“最近”块中显示了几个受保护的主题标题。(泄露 b,稍严重)

3 个赞

谢谢 @Stephen,你太棒了!!!

我已经修复了“未找到”页面上的“最近主题”。它现在将排除私有类别中的所有主题。

2 个赞

感谢 @RGJ

Discourse 确实急需这个。大多数论坛平台固有的创建/回复功能,在其整体框架中是真正必需的。我感谢您在这件事上的辛勤努力。

1 个赞

您好,

我正在为我的社区试用此插件,当我和其他几位成员尝试测试时,它似乎没有按预期工作。普通成员创建的帖子对其他所有人可见,而不仅仅是选定的私人群组。这个插件可能没有更新,还是我做错了什么?

1 个赞

最新版本似乎确实存在此问题。请耐心等待,我将进行修复。

1 个赞

已修复,只需拉取新版本即可。

感谢您的报告!

显然,这个

<Input
   @type="checkbox"
   @checked={{this.args.outletArgs.category.custom_fields.private_topics_enabled}}
/>

现在会将字段填充为 t,而以前是 true

2 个赞