ダッシュボードレポート - 未承認ポリシー

これは、未承認ポリシーのダッシュボードレポートのSQLバージョンです。

:discourse: このレポートには、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_policiespost_policy_groupspoststopicsgroup_users テーブルを結合して、グループメンバーシップに基づいて投稿ポリシーの対象となるトピックとユーザーのリストを作成します。
  • policy_users テーブルとの左結合を使用して、ユーザーがポリシーを承認していないインスタンス(pu.id IS NULL)を見つけ、現在のポリシーの承認のみが考慮されるようにします(取り消されておらず、期限切れではなく、ポリシーの現在のバージョンと一致している)。
  • 承認されていないポリシーを持つトピックを示す、一意の topic_iduser_id のペアを選択します。

結果例

トピック ユーザー
ポリシー トピック 1 user_1
ポリシー トピック 1 user_2
ポリシー トピック 2 user_1