Babble: Admins können eine Gruppe mit der Sichtbarkeit „nur Gruppenbesitzer“ nicht sehen

Ich bin gerade in einem von mir betriebenen Forum auf dieses Problem gestoßen. Reproduktionsschritte:

  1. Als Administrator eine neue Gruppe erstellen
  2. Sichtbarkeit auf „Gruppeninhaber“ setzen
  3. Gruppe erstellen
  4. Zurück zu /g navigieren
  5. Die Gruppe wird nicht angezeigt

Wenn Sie die Konsole mit Group.find_by(name: <name>) prüfen, wird sie korrekt zurückgegeben. Eine Änderung der Sichtbarkeit auf „Gruppeninhaber und Mitarbeiter“ führt dazu, dass die Gruppe wieder angezeigt wird.

Sofern dies nicht beabsichtigt ist, gehe ich davon aus, dass sogar Administratoren Gruppen mit dieser Sichtbarkeitseinstellung sehen sollten (wobei dies nicht für Moderatoren gilt).

Dieses Verhalten ist mir erst nach dem Upgrade auf 2.4.0.beta2 gestern aufgefallen.

Hilft ein Neuladen?

Nein, und selbst beim Abrufen des JSON-Endpunkts erscheint die Gruppe nicht als Administrator.

Ich habe kürzlich daran gearbeitet, werde mir das aber ansehen.

Ja. Es sah nicht nach etwas aus, das du übersehen hättest, aber das war alles, was ich hatte. :wink:

Ich kann das bei @justin nicht nachvollziehen. Ich habe es lokal und auf einer bei DO gehosteten Instanz versucht und zudem eine Gruppe von zwei verschiedenen Admin-Konten aus erstellt. Admins sehen in allen Fällen alle Gruppen.

Seltsam – ich werde es auf einer Neuinstallation versuchen. Ich kann es definitiv auf einer meiner Produktionsinstanzen reproduzieren. Ich werde es aktualisieren und dann weitermachen.

Ich habe es bei einer Neuinstallation versucht und bin auf das gleiche Ergebnis wie du, @pmusaraj, gestoßen. Meine Vermutung ist, dass es an einem Plugin liegt, das ich verwende. Sobald ich herausfinde, was los ist, melde ich mich wieder.

Ich bin auch auf dieses Problem gestoßen…

Nutzt ihr auch Plugins? Welche (mit Fokus auf die, die Discourse nicht erstellt und mitliefert)? Oder meinst du, dies ist eine neue Regression @justin?

Hallo, ich habe gerade die Sichtbarkeit einer Gruppe von „Gruppenbesitzer

@outofthebox Hast du zufällig das Babble-Chat-Plugin installiert? Es scheint, als handele es sich um einen Regression in Bezug darauf, nachdem ich es von meiner Instanz entfernt habe. Die Deinstallation dieses Plugins und der Neuaufbau haben die Gruppen-Sichtbarkeit wiederhergestellt.

Toller Fund, @justin! Ich habe mir kurz den Babble-Quellcode angesehen, und es scheint tatsächlich einen Konflikt mit meinen Updates für Gruppen im Core zu geben. Babble fügt eine hartkodierte Regel für visibility_level: 4 hinzu, die nun mit der owners-Gruppe im Core kollidiert.

Hoffentlich hat @gdpelican Zeit, sich das anzusehen.

Wie löse ich dieses Problem für die aktuelle Version von Discourse?
Soll ich diesen Code löschen? .where.not(visibility_level: 4)

  @@visible_group_scope = method(:visible_groups).clone
  scope :visible_groups, ->(user, order = nil, opts = {}) {
    @@visible_group_scope.call(user, order, opts)
  }
end

Okay, ich habe mich also etwas tiefer in dieses Problem eingearbeitet.

Es scheint, als hätte Babble für seinen eigenen Bedarf eine eigene visibility_level zugewiesen und den nächsten ungenutzten Konstantenwert (4) verwendet.

Vor ein paar Wochen hat der Discourse-Kerncode ebenfalls eine neue visibility_level hinzugefügt und dabei den nächsten ungenutzten Konstantenwert verwendet, der ebenfalls 4 war. Dies führte zu einer doppelten Verwendung dieses Konstantenwerts.

Eine Lösung würde also aus zwei Teilen bestehen:

  • Die von Babble verwendete visibility_level ändern. Das wäre einfach. Wenn wir das wirklich sauber machen wollten, würde jedes Plugin sein eigenes BASE_VISIBILITY_LEVEL registrieren, um zukünftige Konflikte zu vermeiden. Aber vorerst könnten wir einfach einen anderen Wert wählen (zum Beispiel 1001).
  • Die Gruppen mit visibility_level 4 auf den neuen Konstantenwert ändern – aber nur die Gruppen, die von Babble verwendet wurden.
    Würde diese Abfrage die richtigen Gruppen auswählen, @gdpelican?
UPDATE groups 
SET visibility_level = 1001 
WHERE id IN (
  SELECT g.id 
  FROM topics t 
  LEFT JOIN topic_allowed_groups tag ON tag.topic_id = t.id 
  LEFT JOIN groups g ON g.id = tag.group_id 
  WHERE t.archetype='chat');

Hallo, entschuldige bitte. Ich werde mir das in den nächsten Tagen ansehen, aber dein allgemeiner Lösungsansatz ist absolut richtig. Das Zurückportieren wird der knifflige Teil sein, ich werde mir das bald genauer ansehen.

Alles klar, ich habe eine Korrektur dafür hochgeladen. Lass mich wissen, falls dir noch weitere Auffälligkeiten auffallen?

Ich habe ein Problem festgestellt: Die Backfiller-Funktionalität scheint keine Multisite-Unterstützung zu bieten (es muss durch die verfügbaren Verbindungen iteriert werden).

@RGJ Hättest du Lust, dafür einen PR aufzumachen? Ich kann ihn mergen, habe aber in den nächsten Tagen nur eingeschränkte Verbindung.

Klar, das schaffe ich am Wochenende.