这是未接受策略的仪表板报告的 SQL 版本。
此报告需要启用 Discourse Policy 插件。
此仪表板报告识别了某些用户尚未接受策略的主题。此报告可帮助管理员确保用户遵守帖子策略,识别尚未接受必需策略的用户,强制执行论坛规则,管理策略更新,并确认用户同意指南。
SELECT distinct t.id AS topic_id, gu.user_id AS user_id
FROM post_policies pp
JOIN post_policy_groups pg on pg.post_policy_id = pp.id
JOIN posts p ON p.id = pp.post_id AND p.deleted_at is null
JOIN topics t ON t.id = p.topic_id AND t.deleted_at is null
JOIN group_users gu ON gu.group_id = pg.group_id
LEFT JOIN policy_users pu ON
pu.user_id = gu.user_id AND
pu.post_policy_id = pp.id AND
pu.accepted_at IS NOT NULL AND
pu.revoked_at IS NULL AND
(pu.expired_at IS NULL OR pu.expired_at < pu.accepted_at) AND
((pu.version IS NULL AND pp.version IS NULL) OR
(pp.version IS NOT NULL AND pu.version IS NOT NULL AND pu.version = pp.version))
WHERE pu.id IS NULL
SQL 查询说明
此查询执行以下操作:
- 连接
post_policies、post_policy_groups、posts、topics和group_users表,以根据用户所属的组别,列出受帖子策略约束的主题和用户。 - 使用左连接(left join)与
policy_users表进行连接,以查找用户尚未接受策略的情况(pu.id IS NULL),确保只考虑当前且相关的策略接受记录(未撤销、未过期且与策略的当前版本匹配)。 - 选择不同的
topic_id和user_id对,表示存在某些用户尚未接受策略的主题。
示例结果
| 主题 | 用户 |
|---|---|
| 策略主题 1 | user_1 |
| 策略主题 1 | user_2 |
| 策略主题 2 | user_1 |
| … | … |