Не отображать имена пользователей с определённым значком

Есть ли способ скрыть список пользователей, имеющих определённый значок?

Я изучил Don't list members having the same badges и Hide badge user list?, но они не совсем подходят для нашего случая (или, скорее, для нашего редкого сценария).

Значки очень популярны в нашем сообществе и являются отличным инструментом для вовлечения пользователей.

У нас есть премиум-категории в Discourse, доступные только подписчикам или платным участникам, и мы хотели бы награждать таких платных участников золотым значком на их профиле. Назовём его, например, «Особый участник».

Количество платных участников является коммерчески чувствительной информацией.

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

Есть ли способ запретить пользователям видеть, кто ещё имеет только один конкретный значок? :thinking:

Может, лучше использовать флейр?

Хммм :thinking:

Вполне возможно…

Содержит ли это предупреждение риск утечки конфиденциальных номеров участников?

Поскольку это основная группа, имя ‘hidden_group_test_2’ будет использоваться в CSS-классах, которые может увидеть любой.

Извините за яркие цвета, это просто для тестирования:

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

Я провёл несколько тестов, но не уверен, что это тоже идеально подходит для нашего варианта использования.

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

На своём профиле он затем может выбрать только флейр публичной группы, полностью теряет доступ к своему особому флейру участника и не может применить его снова :confused:

Установили ли вы это для других групп:

Screenshot 2023-02-07 at 2.09.34 PM

Это находится в разделе «Эффекты» в управлении/участии для каждой группы.

Если это установлено только для этой группы и ни для одной другой, то оно не должно переопределять настройки.

Основная группа будет определять флейр и заголовок по умолчанию для пользователя.

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

Другие идеи сводились к принудительному назначению всем пользователям титула, например «Гость», но они могли бы просто изменить его на любой из титулов значков, которые у них есть. Я не думаю, что могу запретить пользователям менять свой Титул.

Мне нужен способ, чтобы гости и участники могли идентифицировать друг друга как таковые (например, с помощью значка), но при этом не раскрывать количество участников с «Экстра-Специальным» статусом.

Есть ли какие-либо другие инновационные решения или обходные пути?

Могу ли я что-то хитрое сделать с «Полями пользователя»?

Может быть, создать поле пользователя под названием «Статус», сделать его видимым на их профиле, но недоступным для редактирования ими. Могу ли я затем автоматически обновлять это поле «Статус» через вызов API? (мы отправляем вызов API, чтобы добавить их в Группу)

Возможно, я на правильном пути:

Я создал поле профиля пользователя с названием «Участник» и запретил его редактирование:

Если я редактирую одного пользователя для теста, то на его профиле вижу «Участник: Да»:

Однако решающим, вероятно, будет следующий вопрос:

Как мне это реализовать? :thinking:

У меня уже есть вызов API, который срабатывает, когда кто-то становится участником: я отправляю запрос к Discourse, чтобы добавить его в группу. Могу ли я также отправить второй вызов API для обновления этого поля профиля?

Конечно :slight_smile:

Каждый раз, когда вы выполняете какое-либо действие в Discourse, вы можете проверить вкладку «Сеть» в инструментах разработчика вашего браузера, чтобы увидеть отправленный запрос.

Например, вот как я сохраняю профиль пользователя:

Вы видите URL-адрес запроса, в котором упоминается имя пользователя, а также тип запроса (PUT).
На вкладке «Payload» отображаются соответствующие данные:

Пользовательские поля перечислены как user_fields[X], где X — номер пользовательского поля.


Редактирование: Я заметил, что вы уже решили это в канале Development, так что просто для перекрёстной ссылки… :slight_smile: