Babble: Los administradores no pueden ver un grupo configurado solo con visibilidad de `group owner`

Acabo de encontrarme con esto en un foro que administro. Pasos para reproducir:

  1. Crear un nuevo grupo como administrador
  2. Establecer la visibilidad en “dueños del grupo”
  3. Crear el grupo
  4. Volver a /g
  5. El grupo no aparecerá

Si revisas la consola usando Group.find_by(name: <nombre>), devuelve el resultado correctamente. Cambiar la visibilidad a “Dueños del grupo y personal” sí muestra el grupo.

A menos que esto sea intencional, mi suposición es que incluso los administradores deberían ver los grupos con este nivel de visibilidad (aunque no los moderadores).

No noté este comportamiento hasta que actualicé a 2.4.0.beta2 ayer.

¿Ayuda recargar?

No, e incluso al obtener el endpoint JSON, el grupo no aparece como administrador.

Trabajé en esto recientemente, echaré un vistazo.

Sí. No parecía algo que hubieras pasado por alto, pero era todo lo que tenía. :wink:

No puedo reproducir esto, @justin. Lo intenté localmente y en una instancia alojada en DO, y también probé creando un grupo desde dos cuentas de administrador diferentes. En todos los casos, los administradores ven todos los grupos.

Estrano: tendré que intentarlo en una instalación nueva. Definitivamente puedo reproducirlo en una instancia de producción que tengo. Intentaré actualizarla y veré qué pasa.

Lo probé en una instalación nueva y obtuve los mismos resultados que tú, @pmusaraj. Supongo que se debe a un complemento que estoy usando. Si descubro qué pasa, te lo haré saber.

Yo también me he encontrado con este problema…

¿Tú también usas complementos? ¿Cuáles (centrándote en los que Discourse no crea ni incluye)… o estás diciendo que esto es una nueva regresión @justin?

Hola, acabo de cambiar la visibilidad de un grupo de “Propietarios del grupo” a “Propietarios y miembros del grupo” y se volvió a hacer visible. Me pregunto si hay algo extraño en el código de la configuración de un grupo cuando su visibilidad está restringida a “Propietarios del grupo”.

@outofthebox ¿Por casualidad tienes instalado el plugin de chat Babble? Parece que es una regresión relacionada con eso después de que lo eliminé de mi instancia. Desinstalar ese plugin y reconstruirlo restauró la visibilidad del grupo.

Buen hallazgo, @justin. Revisé rápidamente el código fuente de Babble y parece haber un conflicto con mis actualizaciones de grupos en el núcleo. Babble agrega una regla codificada para visibility_level: 4, que ahora entra en conflicto con el grupo owners en el núcleo.

Esperemos que @gdpelican pueda tener tiempo para echar un vistazo.

¿Cómo solucionar esto para la versión actual de Discourse?
¿Debería eliminar este código? .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, así que he profundizado un poco más en este problema.

Parece que babble había asignado su propio visibility_level para su uso interno y tomó la constante sin usar siguiente (4).

Hace unas semanas, el código principal de Discourse también agregó un nuevo visibility_level y tomó la constante sin usar siguiente, que también era 4. Esto provocó un uso duplicado de esta constante.

Por lo tanto, la solución constaría de dos partes:

  • Cambiar el visibility_level utilizado por babble. Eso sería sencillo. Si quisiéramos hacerlo de manera realmente ordenada, cada plugin registraría su propio BASE_VISIBILITY_LEVEL para evitar conflictos futuros. Pero por ahora, podríamos simplemente elegir uno (por ejemplo, 1001).
  • Cambiar los grupos con visibility_level 4 a la nueva constante, pero solo los grupos que eran utilizados por babble.
    ¿Seleccionaría esta consulta los grupos correctos, @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');

Hola, lo siento. Lo revisaré en los próximos días, pero tu esquema general de la solución es perfecto. La parte complicada será el backport, así que lo estudiaré más de cerca pronto.

Bien, he aplicado una corrección para esto. Avísame si experimentas cualquier otra anomalía.

Encontré un problema: parece que la funcionalidad de Backfiller carece de soporte multisitio (necesita iterar a través de las conexiones disponibles).

@RGJ ¿Te animarías a hacer un PR para eso? Puedo fusionarlo, pero tendré conectividad limitada durante los próximos días.

Claro, podré hacerlo este fin de semana.