Babble : Les administrateurs ne peuvent pas voir un groupe défini avec une visibilité « propriétaire du groupe » uniquement

Je viens de tomber sur ce problème sur un forum que j’administre. Étapes pour reproduire :

  1. Créer un nouveau groupe en tant qu’administrateur
  2. Définir la visibilité sur « propriétaires du groupe »
  3. Créer le groupe
  4. Retourner à /g
  5. Le groupe n’apparaît pas

Si vous vérifiez la console en utilisant Group.find_by(name: <nom>), la requête renvoie correctement le groupe. Changer la visibilité en « propriétaires du groupe et personnel » permet de rendre le groupe visible.

Sauf si ce comportement est intentionnel, je suppose que même les administrateurs devraient voir les groupes avec ce niveau de visibilité (mais pas les modérateurs).

Je n’ai remarqué ce comportement qu’après la mise à niveau vers la version 2.4.0.beta2 hier.

Est-ce que le rechargement aide ?

Non, et même en interrogeant le point de terminaison JSON, le groupe n’apparaît pas en tant qu’administrateur.

J’ai travaillé là-dessus récemment, je vais jeter un coup d’œil.

Ouais. Ça ne semblait pas être le genre de chose que tu aurais négligée, mais c’était tout ce que j’avais. :wink:

Je ne parviens pas à reproduire ce problème @justin. J’ai essayé en local et sur une instance hébergée sur DO, et j’ai également essayé de créer un groupe à partir de deux comptes administrateur différents. Dans tous les cas, les administrateurs voient tous les groupes.

Étrange — je vais devoir essayer de le faire sur une installation neuve. Je peux certainement reproduire le problème sur une instance de production que j’ai. Je vais essayer de la mettre à jour et voir ce que ça donne.

J’ai essayé sur une installation fraîche et j’ai obtenu les mêmes résultats que toi, @pmusaraj. Je suppose que c’est dû à un plugin que j’utilise. Si je découvre ce qui se passe, je te tiendrai au courant.

J’ai également rencontré ce problème…

Utilisez-vous également des plugins ? Lesquels (en vous concentrant sur ceux que Discourse ne crée et n’expédie pas)… ou bien dites-vous qu’il s’agit d’une nouvelle régression @justin ?

Bonjour, je viens de modifier la visibilité d’un groupe de « Propriétaires du groupe » à « Propriétaires et membres du groupe », et il est redevenu visible. Je me demande s’il y a un problème dans le code relatif au paramètre de visibilité d’un groupe lorsqu’il est restreint à « Propriétaires du groupe » ?

@outofthebox Avez-vous par hasard le plugin de chat Babble installé ? Il semble qu’il s’agisse d’une régression liée à ce plugin après l’avoir supprimé de mon instance. La désinstallation de ce plugin et la reconstruction ont rétabli la visibilité du groupe.

Bonne trouvaille @justin. J’ai jeté un coup d’œil rapide au code source de Babble, et il semble y avoir un conflit avec mes mises à jour des groupes dans le noyau. Babble ajoute une règle codée en dur pour visibility_level: 4, ce qui entre maintenant en conflit avec le groupe owners dans le noyau.

J’espère que @gdpelican aura le temps de jeter un coup d’œil.

Comment corriger cela pour la version actuelle de Discourse ?
Devrais-je supprimer ce code ? .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, j’ai donc creusé un peu plus cette question.

Il semble que babble ait attribué son propre visibility_level pour son usage interne et ait pris la constante suivante non utilisée (4).

Il y a quelques semaines, le code de base de Discourse a également ajouté un nouveau visibility_level et a pris la constante suivante non utilisée, qui était également 4. Cela a provoqué une utilisation dupliquée de cette constante.

Une correction consisterait donc en deux parties :

  • modifier le visibility_level utilisé par babble. Cela serait facile. Si nous voulions faire cela très proprement, chaque plugin enregistrerait son propre BASE_VISIBILITY_LEVEL afin d’éviter de futurs conflits. Mais pour l’instant, nous pourrions simplement en choisir un (par exemple 1001).
  • modifier les groupes ayant un visibility_level de 4 vers la nouvelle constante, mais seulement les groupes utilisés par babble.
    Cette requête sélectionnerait-elle les bons groupes @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');

Salut, désolé, je vais jeter un coup d’œil à cela dans les prochains jours, mais ton aperçu général de la correction est parfait. Le backport sera la partie délicate, je vais y regarder de plus près bientôt.

Très bien, j’ai appliqué un correctif pour cela. Faites-moi savoir si vous rencontrez d’autres problèmes étranges ?

J’ai trouvé un problème : il semble que la fonctionnalité Backfiller manque de support multisite (elle doit boucler sur les connexions disponibles).

@RGJ Serait-tu partant pour ouvrir une PR à ce sujet ? Je peux la fusionner, mais je n’aurai qu’une connectivité limitée pour les prochains jours.

Bien sûr, je pourrai le faire ce week-end.