Babble: gli amministratori non possono vedere un gruppo impostato su `proprietario del gruppo` con visibilità limitata

Ho appena riscontrato questo problema su un forum che gestisco. Passaggi per riprodurre:

  1. Crea un nuovo gruppo come amministratore
  2. Imposta la visibilità su “proprietari del gruppo”
  3. Crea il gruppo
  4. Torna a /g
  5. Il gruppo non viene visualizzato

Se controlli la console usando Group.find_by(name: <nome>), la ricerca restituisce correttamente il risultato. Cambiare la visibilità in “Proprietari del gruppo e personale” ripristina la visibilità.

A meno che non sia previsto dal design, il mio assunto è che anche gli amministratori dovrebbero vedere i gruppi impostati a questo livello di visibilità (anche se non i moderatori).

Non avevo notato questo comportamento fino all’aggiornamento a 2.4.0.beta2 di ieri.

Ricaricare aiuta?

No, e nemmeno recuperando l’endpoint JSON il gruppo non appare come amministratore.

Ci ho lavorato di recente, darò un’occhiata.

Sì. Non sembrava una cosa che avresti trascurato, ma era tutto quello che avevo. :wink:

Non riesco a riprodurre il problema @justin. Ho provato in locale e su un’istanza ospitata su DO, e ho anche creato un gruppo da due diversi account amministratore. In tutti i casi, gli amministratori vedono tutti i gruppi.

Strano - dovrò provare a farlo su un’installazione nuova. Posso sicuramente riprodurlo su un’istanza di produzione che ho. Proverò ad aggiornarla e vediamo da lì.

Ho provato con una nuova installazione e ho ottenuto gli stessi risultati di te, @pmusaraj. Penso che sia un plugin che sto usando. Se scoprirò di cosa si tratta, farò rapporto.

Anche io ho incontrato questo problema…

Anche voi usate dei plugin? Quali (concentrandovi su quelli che Discourse non crea e non include)… o state dicendo che si tratta di una nuova regressione, @justin?

Ciao, ho appena modificato la visibilità di un gruppo da “Solo proprietari del gruppo” a “Proprietari e membri del gruppo” e il gruppo è diventato di nuovo visibile. Mi chiedo se ci sia qualcosa di strano nel codice relativo all’impostazione della visibilità di un gruppo quando questa è limitata a “Solo proprietari del gruppo”?

@outofthebox Per caso hai installato il plugin di chat Babble? Sembra che si tratti di una regressione legata a quel plugin dopo averlo rimosso dalla mia istanza. Disinstallando il plugin e ricostruendo tutto, la visibilità del gruppo è tornata.

Ottima scoperta @justin, ho dato un’occhiata veloce al codice sorgente di Babble e sembra esserci un conflitto con le mie modifiche ai gruppi nel core. Babble aggiunge una regola hardcoded per visibility_level: 4, che ora entra in conflitto con il gruppo owners nel core.

Speriamo che @gdpelican abbia tempo di dare un’occhiata.

Come risolvere questo problema per la versione attuale di Discourse?
Dovrei eliminare questo codice? .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

Ok, quindi ho analizzato più a fondo questo problema.

Sembra che babble avesse assegnato un proprio visibility_level per il proprio utilizzo, prendendo la costante non utilizzata successiva (4).

Qualche settimana fa, il codice principale di Discourse ha aggiunto un nuovo visibility_level, prendendo anch’esso la costante non utilizzata successiva, che era anch’essa 4. Questo ha causato un uso duplicato di questa costante.

Una soluzione consisterebbe in due parti:

  • cambiare il visibility_level utilizzato da babble. Sarebbe semplice. Se volessimo farlo in modo davvero ordinato, ogni plugin registrerebbe il proprio BASE_VISIBILITY_LEVEL per evitare futuri conflitti. Ma per ora potremmo semplicemente sceglierne uno (ad esempio 1001).
  • cambiare i gruppi con visibility_level 4 alla nuova costante - ma solo i gruppi utilizzati da babble.
    Questa query selezionerebbe i gruppi giusti @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');

Ciao, scusa, darò un’occhiata a questo nei prossimi giorni, ma la tua bozza generale di soluzione è perfetta. Il backport sarà la parte più delicata, ci darò un’occhiata più da vicino presto.

Va bene, ho applicato una correzione per questo. Fammi sapere se noti altri comportamenti strani?

Ho individuato un problema: sembra che la funzionalità Backfiller non supporti i multisiti (deve iterare attraverso le connessioni disponibili).

@RGJ Saresti disponibile a creare una PR per quello? Posso unirla, ma per i prossimi giorni avrò una connettività limitata.

Certo, riuscirò a farlo questo weekend.