Флаир пользователя сохраняется после удаления из группы

Если я удалю пользователя из группы, должен ли я ожидать, что флейр этой группы немедленно исчезнет с аватара пользователя?

Я только что удалил пользователя из группы.
У неё не выбран основной group.
image

В её настройках не выбран ни один флейр.

Я обновил браузер и вышел из системы, а затем снова вошёл.

Должна ли она выйти из системы и войти снова, чтобы флейр был удалён? Не упустил ли я какой-то шаг?

6 лайков

Большинство заданий отображаются по адресу forum.example.com/sidekiq/scheduler. Например, если вы изменили запрос для значка, можно подождать сутки, пока выполнится задание BadgeGrant, или ускорить процесс, нажав кнопку Trigger вручную. Однако я не знаю, какое из этих заданий обновляет флейры.

1 лайк

Да, за исключением небольшого частного случая анонимного пользователя, который будет видеть старый флейр на некоторых страницах в течение 1 минуты.

Мы расследуем и исправим.

3 лайка

Флаир пользователя также сохраняется при смене основной группы на новую основную группу, с которой связан флаир.

1 лайк

Это уже исправлено здесь

Вы изменили основную группу, используя массовое действие «Сделать все основными» на странице отдельной группы?

4 лайка

Нет, я изменил основную группу для одного пользователя на странице администратора этого пользователя.

1 лайк

Хочу сообщить, что проблема сохраняется в версии 2.8.0.beta4 (Commits · discourse/discourse · GitHub)

Мы ещё не обновились до последнего коммита, так как в нём нет изменений, исправляющих эту ошибку.
В нашем случае при обновлении групп через Discourse Connect SSO флаги пользователей остаются без изменений. Мы видим, что пользователя больше нет в группе, но флаг остаётся.

Надеемся, это поможет в выявлении и исправлении ошибки.

Это исправление не будет применено ретроспективно. Вам нужно вручную обновить флейры для старых пользователей. Не могли бы вы сообщить, сколько пользователей затронула эта проблема?

Вау. Ну, я не знаю точных оценок. Исходя из наших потоков данных, ежедневно десятки и даже сотни пользователей могут покидать или присоединяться к определённым группам через SSO.
Могу ли я подсчитать пользователей с устаревшими (не связанными с группами) флэрами?

И как вообще редактировать флейры других пользователей? Я не смог найти такую опцию в панели администратора. Не то чтобы я собирался обновлять столько пользователей по одному, чтобы устранить последствия этой ошибки.

Кстати, удаление флейра из настроек группы и загрузка другого изображения флейра не помогает. Пользователи, не входящие в эту группу, всё ещё сохраняют флейр группы :frowning:

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


Извините, что так часто поднимаю эту тему, но этот баг действительно сильно мешает нашему сообществу :frowning:
@vinothkannans, есть ли у вас какие-либо предложения, как нам действовать в связи с его последствиями?

User.where(flair_group_id: REPLACE_WITH_GROUP_ID).where.not(primary_group_id: REPLACE_WITH_GROUP_ID).update_all(flair_group_id: nil)

Команда выше может решить вашу проблему. Выполните её в консоли Rails. Пожалуйста, сделайте резервную копию перед выполнением.

Спасибо за ответ.
Правильно ли я понимаю, что из-за последствий этой ошибки нам следует выполнять подобные запросы ежедневно или с другой периодичностью? Дело в том, что наша группа пользователей обновляется ежедневно, а также каждый раз, когда меняется статус подписки пользователя на основном сайте. Всё это осуществляется через SSO.

Нет, запускать это регулярно не нужно. Сейчас проблема исправлена в коммите выше. Эта команда исправит флейры для затронутых пользователей.

Завтра я поищу альтернативное решение.

1 лайк

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

@kinetiksoft следующий код на Ruby должен исправить проблему для всех участников в каждой группе. Он удалит флейр группы у пользователей, если они больше не принадлежат к этой группе флейра.

Обратите внимание, что запускать этот скрипт регулярно не нужно. Это разовое исправление для старых затронутых пользователей. В качестве меры предосторожности сделайте резервную копию перед запуском.

User.joins("LEFT OUTER JOIN group_users ON group_users.user_id = users.id AND group_users.group_id = users.flair_group_id").where(group_users: { id: nil }).where.not(flair_group_id: nil).update_all(flair_group_id: nil)

Привет, @vinothkannans,

Спасибо! Я сообщу вам, как только мы выполним запрос, и предоставлю обновления в ближайшие дни, чтобы убедиться, что после этого не будет несоответствий в связях между флерами и группами.

1 лайк

Кроме того, я добавил ещё одно исправление в указанный выше коммит. Обязательно обновите свой сайт после того, как он будет принят.

1 лайк

Отлично, конечно, посмотрю предстоящие коммиты в разделе обновления.
Стоит ли нам подождать с SQL-запросом из вышеупомянутого сообщения или можем приступить к нему, не дожидаясь слияния коммита в нашем экземпляре Discourse?

Вы можете выполнить команду после обновления.

2 лайка