currentUser.groups と group_users テーブルが一致しません

これはバグだと思いますが、Dev に再分類しても構いません。

再現手順

  1. 管理画面 > テーマ > 共通 > <head> に移動し、以下のコードを貼り付けてテーマを作成します。

    <script type="text/discourse-plugin" version="0.8.42">
      const currentUser = api.getCurrentUser()
      const groupIds = currentUser.groups.map(x => x.id)
      console.log(`User id: ${currentUser.id} Group ids: ${groupIds} (${groupIds.length})`)
    </script>
    
  2. 異なるユーザーになりすまして、取得できるグループを確認します。

  3. データエクスプローラー(または DB)に移動し、以下のクエリを実行します。

    SELECT
        u.id,
        array_agg(group_id),
        count(group_id)
    FROM
        group_users gu
        LEFT JOIN users u ON u.id = gu.user_id
        LEFT JOIN GROUPS g ON g.id = gu.group_id
    WHERE
        user_id IN (2, 3, 6) -- なりすましたユーザー ID に合わせてください
    GROUP BY
        u.id
    ORDER BY
        u.id
    

DB の出力結果

- 2	{1,3,10,11,12,13,14,50,63,64,68}	11

- 3	{2,3,10,11,12,13,14,53,54,59,61,75,77,79,88}	15 

- 6	{10,11,54,75,77,87}	6

API の出力結果

- User id: 2 Group ids: 1, 3, 10, 11, 12, 13, 14, 50, 63, 64, 68 (11)

- User id: 3 Group ids: 10, 53, 54, 59, 61, 75, 79, 88 (8) <= 7 つのグループが欠落

- User id: 6 Group ids: 10, 54 (2) <= 4 つのグループが欠落

DB の出力結果は正しいです(UI でこれらのユーザーにそれらのグループが割り当てられていることが確認できるため)、問題はおそらく API にあります。currentUser.groups に一部のグループが送信されない原因は何が考えられるでしょうか?

ユーザーから非表示になるように設定されたグループが不足している可能性がありますか?もしそうであれば、それらはクライアント側の currentUser オブジェクトに含まれません。

「いいね!」 4

ああ、なるほど。では、もうバグではないのですね。ありがとう!

「いいね!」 2