これはバグだと思いますが、Dev に再分類しても構いません。
再現手順
-
管理画面 > テーマ > 共通 >
<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> -
異なるユーザーになりすまして、取得できるグループを確認します。
-
データエクスプローラー(または 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 に一部のグループが送信されない原因は何が考えられるでしょうか?
