Babble: Админы не видят группу с видимостью только для «владельца группы»

Я только что столкнулся с этим на форуме, который я администрирую. Шаги для воспроизведения:

  1. Создать новую группу как администратор.
  2. Установить видимость в «Владельцы группы».
  3. Создать группу.
  4. Вернуться на /g.
  5. Группа не отображается.

Если проверить консоль, используя Group.find_by(name: <name>), то она возвращается корректно. Изменение видимости на «Владельцы группы и сотрудники» возвращает видимость.

Если это не сделано намеренно, я предполагаю, что даже администраторы должны видеть группы с таким уровнем видимости (хотя модераторы — нет).

Я не замечал такого поведения до обновления до версии 2.4.0.beta2 вчера.

Помогает ли перезагрузка?

Нет, и даже при запросе к JSON-эндпоинту группа не отображается как администратор.

Я недавно работал над этим, посмотрю.

Да. Не похоже, что ты мог бы это упустить, но другого у меня не было. :wink:

Я не могу воспроизвести это, @justin. Я пробовал локально и на хостинге DO, а также создавал группу из двух разных аккаунтов администратора. Во всех случаях администраторы видят все группы.

Странно — придётся попробовать на чистой установке. У меня точно воспроизводится на продакшн-инстансе. Попробую обновить и посмотрим, что получится.

Я попробовал на чистой установке и получил те же результаты, что и ты, @pmusaraj. Думаю, дело в одном из используемых мной плагинов. Если выясню, в чём проблема, сообщу.

Я тоже столкнулся с этой проблемой…

Вы тоже используете плагины? Какие именно (с упором на те, которые Discourse не создаёт и не поставляется с ними)… или вы говорите, что это новая регрессия, @justin?

Привет, я только что изменил видимость группы с «Владельцы группы» на «Владельцы группы, участники», и она снова стала видимой. Не кажется ли вам, что в коде настройки видимости группы есть какая-то странность, когда видимость ограничена только «Владельцами группы»?

@outofthebox У вас случайно установлен плагин чата Babble? Похоже, что после его удаления с моего экземпляра возникла регрессия, связанная именно с ним. Удаление этого плагина и повторная сборка вернули видимость групп.

Отличное замечание, @justin. Я быстро просмотрел исходный код Babble, и там, похоже, возникает конфликт с моими обновлениями для групп в ядре. Babble добавляет жестко заданное правило для visibility_level: 4, которое теперь конфликтует с группой owners в ядре.

Надеюсь, у @gdpelican найдется время это посмотреть.

Как исправить это для текущей версии Discourse?
Нужно ли удалить этот код? .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

Хорошо, я немного глубже разобрался в этой проблеме.

Похоже, что плагин Babble назначил свой собственный visibility_level для собственных нужд и взял следующий неиспользуемый константный код (4).

Несколько недель ago в ядре Discourse также добавили новый visibility_level, и он тоже взял следующий неиспользуемый константный код, который оказался равным 4. Это привело к дублированию использования этого константного кода.

Таким образом, исправление будет состоять из двух частей:

  • Изменить visibility_level, используемый плагинами Babble. Это было бы несложно. Если бы мы хотели сделать это максимально аккуратно, каждый плагин мог бы зарегистрировать свой собственный BASE_VISIBILITY_LEVEL, чтобы избежать будущих конфликтов. Но пока мы можем просто выбрать какое-то значение (например, 1001).
  • Изменить группы с visibility_level 4 на новый константный код, но только те группы, которые использовались плагином Babble.

Выберет ли этот запрос нужные группы, @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');

Привет, извини, я посмотрю на это в ближайшие дни, но твой общий план исправления абсолютно верен. Обратная портировка будет самой сложной частью, я скоро разберусь с этим подробнее.

Хорошо, я исправил эту проблему. Дайте знать, если столкнётесь с какими-либо другими странностями.

Я обнаружил одну проблему: похоже, что функциональность Backfiller не поддерживает работу с несколькими сайтами (необходимо реализовать перебор доступных подключений).

@RGJ Ты бы не мог создать PR по этому поводу? Я смогу его слить, но в ближайшие несколько дней у меня будет ограниченное подключение к интернету.

Конечно, я смогу сделать это в эти выходные.