使用 AND 而不是 OR 来识别多个组中的用户?

使用类别和子类别,让用户根据“或”逻辑查看它们,这一点很容易实现——即,如果用户属于 X 组或 Y 组,他们就可以看到该类别或子类别。

是否可以有效地使用“与”逻辑,以便用户必须同时属于 X 组和 Y 组才能看到某个类别/子类别?

我们的用例是我们有三个访问级别。最容易将其视为一年级学生、二年级学生和三年级学生。一年级只能看到一年级的内容,二年级可以看到一年级和二年级的内容,三年级可以看到所有内容。这效果很好。
我们想添加另一个层,通过奖励信任级别为 3 的用户,让他们能够提前访问某些活动和资源。
我首先尝试通过在各个年级使用未列出的活动来做到这一点,并将这些活动的链接发送给信任级别为 3 的用户,但是,任何通知设置为监控一年级或二年级或三年级的用户也可以立即看到这些活动,而不仅仅限于信任级别 3。
另一种方法是创建一个名为“信任级别 3 奖励”的类别,并为一年级、二年级和三年级设置子类别,但无法像这样限制权限;由于一年级、二年级和三年级必须对该类别具有可见性,因此,这些组中的所有用户(无论信任级别如何)都可以看到子类别。

一种非常笨拙的方法是导出信任级别为 3 的用户,然后导出(例如)二年级的用户,在 Excel 中合并以查找重复项,然后将这些重复项导入到一个名为“信任级别 3 和二年级”的组中。这可以奏效,但每次都需要大量的手动工作,而这是一个我们希望定期执行的操作。

关于实现相同结果的其他方法有什么想法吗?自定义插件或脚本至少可以自动化导出和导入过程吗?

提前感谢。

2 个赞

创建新组,其中包含目标组中信任等级为 3 的用户,这是我能想到的完成此任务的唯一方法。Discourse 没有可以与类别安全权限结合使用的 AND 规则。关于创建排除一个或多个组成员的类别规则,已经出现过几次类似的问题。

如果您的站点上有数据探索器插件,您可以使用数据探索器查询来返回目标组中所有信任等级为 3 的用户的列表。如果您处理的用户数量不多,您应该能够将查询返回的用户名直接复制/粘贴到组的“添加用户”表单中。Discourse 似乎能够处理将已存在于组中的用户名添加到该表单中,因此如果您定期运行查询,您应该能够继续将返回的用户名复制到组的“添加用户”表单中。请注意,我不确定可以粘贴到表单中的最大用户名数量。我刚刚用 80 个用户测试过,没有问题。另外,如果您尝试将 完全相同 的用户列表粘贴到“添加用户”表单中,Discourse 似乎会返回一个错误。但可以忽略该错误。

这是我测试过的查询。您需要在运行查询之前提供组名,例如“year_2”。

--[params]
-- string :group_name

SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3

可以通过 API 运行数据探索器查询来自动化上述过程,然后使用 API 请求的结果来更新组。有关详细信息,请参见:使用 Discourse API 运行数据探索器查询。然后,您需要通过 API 更新组成员。

能够直接对数据探索器查询的结果执行某些类型的操作会很有趣。例如,使用返回用户名列表的查询,将所有用户添加到组中,而无需经过复制/粘贴步骤。

4 个赞

谢谢!
我还没用过 Data Explorer,但它在我待探索的事项清单上,而且这听起来是我正在尝试做的可行方法。我会看看……
也谢谢你的查询。

2 个赞

您好 @CC_people

我不确定这是否能帮到您,但以防万一:

3 个赞

另一种选择是创建一个自定义插件,当满足特定条件时,该插件会将用户添加到特殊组。

2 个赞

以防万一对其他人有用,我将汇报一下我们在这里最终完成的工作。简而言之,我们导出到 Excel,让 Excel 计算出谁符合我们的“AND”标准,然后将这些用户批量添加到组中。
我们让技术助理研究了一个自定义插件来做同样的事情,但看起来它有点棘手,所以目前我们还是使用 Excel。

更多详情:

  1. 导出整个用户数据库。
  2. 导入到 Excel。使用 ISNUMBER 和 SEARCH 将第一个工作表中的特定组用户提取到第二个工作表中。
  3. 再次使用 ISNUMBER 和 SEARCH 将第二个特定组的用户提取到第三个工作表中。
  4. 将这些用户批量添加到他们各自的组中。

我想象着有更简洁的方法可以实现相同的结果,但是现在它已经就位,只需每次粘贴导出的数据,然后导入结果,而无需在过程中思考。
我们正在使用这个系统来奖励 tl3“常规”用户额外的权限和提前访问权限,并且它正在产生预期的效果,鼓励更高质量和更高数量的使用。所以,成功了,尽管有点笨拙且未自动化。我们有了“此组 AND 那组”功能。

您可以使用新的自动化脚本“通过徽章管理用户组成员资格”来关联它?特别是如果您启用了自定义触发徽章。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.