Я только что столкнулся с этим на форуме, который я администрирую. Шаги для воспроизведения:
Создать новую группу как администратор.
Установить видимость в «Владельцы группы».
Создать группу.
Вернуться на /g.
Группа не отображается.
Если проверить консоль, используя Group.find_by(name: <name>), то она возвращается корректно. Изменение видимости на «Владельцы группы и сотрудники» возвращает видимость.
Если это не сделано намеренно, я предполагаю, что даже администраторы должны видеть группы с таким уровнем видимости (хотя модераторы — нет).
Я не замечал такого поведения до обновления до версии 2.4.0.beta2 вчера.
Я не могу воспроизвести это, @justin. Я пробовал локально и на хостинге DO, а также создавал группу из двух разных аккаунтов администратора. Во всех случаях администраторы видят все группы.
Я попробовал на чистой установке и получил те же результаты, что и ты, @pmusaraj. Думаю, дело в одном из используемых мной плагинов. Если выясню, в чём проблема, сообщу.
Вы тоже используете плагины? Какие именно (с упором на те, которые Discourse не создаёт и не поставляется с ними)… или вы говорите, что это новая регрессия, @justin?
Привет, я только что изменил видимость группы с «Владельцы группы» на «Владельцы группы, участники», и она снова стала видимой. Не кажется ли вам, что в коде настройки видимости группы есть какая-то странность, когда видимость ограничена только «Владельцами группы»?
@outofthebox У вас случайно установлен плагин чата Babble? Похоже, что после его удаления с моего экземпляра возникла регрессия, связанная именно с ним. Удаление этого плагина и повторная сборка вернули видимость групп.
Отличное замечание, @justin. Я быстро просмотрел исходный код Babble, и там, похоже, возникает конфликт с моими обновлениями для групп в ядре. Babble добавляет жестко заданное правило для visibility_level: 4, которое теперь конфликтует с группой owners в ядре.
Надеюсь, у @gdpelican найдется время это посмотреть.
Хорошо, я немного глубже разобрался в этой проблеме.
Похоже, что плагин Babble назначил свой собственный visibility_level для собственных нужд и взял следующий неиспользуемый константный код (4).
Несколько недель ago в ядре Discourse также добавили новый visibility_level, и он тоже взял следующий неиспользуемый константный код, который оказался равным 4. Это привело к дублированию использования этого константного кода.
Таким образом, исправление будет состоять из двух частей:
Изменить visibility_level, используемый плагинами Babble. Это было бы несложно. Если бы мы хотели сделать это максимально аккуратно, каждый плагин мог бы зарегистрировать свой собственный BASE_VISIBILITY_LEVEL, чтобы избежать будущих конфликтов. Но пока мы можем просто выбрать какое-то значение (например, 1001).
Изменить группы с visibility_level 4 на новый константный код, но только те группы, которые использовались плагином Babble.
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 не поддерживает работу с несколькими сайтами (необходимо реализовать перебор доступных подключений).