currentUser.groups stimmt nicht mit der group_users Tabelle überein

Ich glaube, das ist ein Fehler, aber fühle dich frei, es in Dev neu zu kategorisieren.

Schritte zur Reproduktion

  1. Erstelle ein Theme, indem du zu Admin > Themes > Common > </head> gehst und dies einfügst:

    <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. Imponiere verschiedene Benutzer, um zu sehen, welche Gruppen du erhältst.

  3. Gehe zum Data Explorer (oder zur DB) und führe diese Abfrage aus:

    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) -- oder welche Benutzer-IDs du auch immer imponiert hast
    GROUP BY
        u.id
    ORDER BY
        u.id
    

DB-Ausgabe

- 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-Ausgabe

- 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 fehlende Gruppen

- User id: 6 Group ids: 10, 54 (2) <= 4 fehlende Gruppen

Die DB-Ausgabe ist korrekt (ich kann in der UI sehen, dass diese Benutzer diese Gruppen zugewiesen haben), also scheint es ein Problem in der API zu geben. Was könnte dazu führen, dass einige Gruppen nicht an currentUser.groups gesendet werden?

Ist es möglich, dass die fehlenden Gruppen so konfiguriert wurden, dass sie für Benutzer ausgeblendet sind? Wenn ja, werden sie nicht im currentUser-Objekt auf dem Client enthalten sein.

Ah, guter Punkt. Dann ist es also kein Fehler mehr. Danke!