创建新组,其中包含目标组中信任等级为 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 更新组成员。
能够直接对数据探索器查询的结果执行某些类型的操作会很有趣。例如,使用返回用户名列表的查询,将所有用户添加到组中,而无需经过复制/粘贴步骤。