Скрытые поля пользователя

:information_source: Краткое описание Создание полей пользователя, видимых только указанным группам
:hammer_and_wrench: Репозиторий discourse-hidden-user-fields
:question: Руководство по установке Как установить тему или компонент темы
:open_book: Новичок в темах Discourse? Начинающее руководство по использованию тем Discourse

Установить этот компонент темы

Подробное описание

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

У меня есть два пользователя: derek_test (слева) и anon9 (справа). Поля «ID» и «Компания» заполнены в их профилях, но видны только друг другу. derek_test видит ID, а anon9 — Компания.

Профили пользователей

Карточки пользователей

Каталог пользователей

В данном случае anon9 (справа) может видеть компанию и искать «Acme».


Настройки

CleanShot 2025-11-13 at 16.17.43

  • Имя поля: введите имя пользовательского поля (одно на объект)
  • Разрешённые группы: выберите разрешённые группы из списка

Предварительные требования

Это решение использует Пользовательские поля. Эти настройки определяют, где поля будут видны:

:warning: Примечание: Параметр Searchable относится к каталогу пользователей, а не к поиску по всему сайту. Искомые термины всё ещё будут видны через этот поиск. :warning:

:white_check_mark: Перепроверьте эти настройки после заполнения полей или создайте разрешения заранее, чтобы эти поля никогда не были доступны для просмотра.

6 лайков

Что видят пользователи, не вошедшие в систему? То есть, если поле доступно только администраторам, я предполагаю, что пользователи не смогут его увидеть даже после выхода из системы, верно?


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

1 лайк

Отличное замечание, я только что обновил это с учётом данного момента. Могу подтвердить, что пользователи, не вошедшие в систему, не видят это поле.

Честно говоря, я сделал это с помощью Claude Code, но он сообщил, что list_type: group недоступен в редакторе объектов — только как настройка верхнего уровня.

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

1 лайк

Это интересно. Судя по документации, я ожидал, что это будет поддерживаться.

2 лайка

Спасибо, что указали на это! Я смог изменить настройки группы, основываясь на этой документации!

Я обновлю информацию выше, чтобы отразить это изменение.

2 лайка

Хм… Хотя настройки в редакторе объектов принимали list_type:group, я не смог преодолеть ошибку:

CleanShot 2025-11-13 at 13.52.29

Я попробовал несколько разных преобразований, но не смог пройти дальше. Вердикт таков: «Тип groups в схемах объектов задокументирован, но интерфейс не реализован во фронтенде».

2 лайка

Я тоже видел эту ошибку, но после того, как я нажал кнопку сброса, чтобы сбросить все настройки объекта, ошибка больше не появлялась :woman_shrugging:

Так что сейчас всё в порядке

Возможно, система не одобрила изменение типа настройки в уже существующей конфигурации.

2 лайка

Вижу, что это может быть очень полезно!

1 лайк

Привет, @putty!

У меня возникли некоторые проблемы:

Мне нужно скрыть поля пользователей от всех, кто не входит в группу «Пользователи» — это именно тот случай?

  1. Если сам пользователь не входит в эту группу, он тоже не может видеть эти поля в своём аккаунте — это нормально?
  2. Другие пользователи продолжат не видеть эти поля, если они не администраторы или модераторы!
  3. Кстати, модераторы и администраторы тоже должны быть в этой группе, чтобы видеть поля, скрытые этой темой.

Не могли бы вы помочь с этим?

Привет, Алексей,
Можешь уточнить? Я не вижу проблемы. Сейчас там есть пункты 1 и 2. Твой запрос также касается скрытия полей от модераторов и администраторов? К слову, администраторам всё равно придётся создать это поле изначально.

Привет, спасибо!

Только что снова протестировал это на локальной чистой последней версии репозитория GitHub и на размещенном решении с последней сборкой — затронута только категория «Администратор», и он/она видит поле «Скрытый», если является участником группы, которой разрешено видеть это поле. Даже доступ модератора (как я думал ранее) не работает.

Случай:

  1. Два пользователя: администратор и Alex_1.
  2. Группа пользователей: L2_verified.
  3. Поле пользователя: «Полное имя» (для всех пользователей: «Включено» везде, «Искать» — только «Выключено»).
  4. У обоих пользователей имена: Alex Admin и Alex.
  5. Настройки темы:
    Включить компонент в этих темах (Foundation, Horizon)
    Имя поля: «Полное имя»
    Разрешенные группы: L2_verified

Результаты:

  1. Оба не являются участниками L2_verified — никто не видит поле «Полное имя» (даже своё собственное).
  2. Администратор является участником L2_verified — может видеть «Полное имя» Alex_1 (и своё собственное).
  3. Alex_1 является участником L2_verified — не может видеть «Полное имя» ни своё, ни администратора.
  4. Когда я предоставил администратору права Alex_1 — он/она может видеть «Полное имя» обоих: своё и администратора.
1 лайк

Так… Похоже, всё в порядке? ха-ха :sweat_smile:

1 лайк

Мой инструмент Antigravity с Gemini 3 Pro High обнаружил корневую причину:

Выявлена корневая причина: Группа

L2_verified

существует, и

Alex_1

является её участником, НО уровень видимости группы установлен на 4 (только для сотрудников/владельцев).

Из-за этого ограничительного параметра Discourse не сообщает браузеру, что

Alex_1

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

L2_verified

и продолжает скрывать поле.

Исправление:

  1. Перейдите в ГруппыL2_verifiedУправлениеВзаимодействие.

  2. Измените параметр Кто может видеть эту группу? на “Участники” или “Все”.

  3. Сохраните изменения.

  4. Обновите страницу как

    Alex_1
    

    (не администратор). Теперь всё должно работать!

Однако это пока не обходное решение — большинство наших групп скрыто от всех :frowning:

Привет @dereklputnam,

Спасибо за этот замечательный компонент! Он стал отличной основой для управления приватностью пользователей на Discourse.

На основе вашей работы я разработал специальный форк с двусторонней (взаимной) видимостью. В нашем профессиональном сообществе нам требовалась модель «Взаимного доверия», при которой проверенные участники могут видеть реальные имена и бизнес-данные друг друга, оставаясь при этом полностью анонимными для широкой публики или непроверенных пользователей.

Ключевые особенности этого форка:

  • Взаимная логика: Поле раскрывается только если оба — и смотрящий, и владелец профиля — состоят в авторизованной группе.

  • Контроль со стороны персонала: Администраторы и модераторы сохраняют полный доступ к данным в целях безопасности и модерации.

  • Видимость для самого себя: Пользователи всегда могут видеть свои скрытые поля, даже если они ещё не вошли в авторизованную группу, что позволяет им управлять своим профилем.

  • Конфиденциальность «равный-равному»: Гарантируется, что даже проверенные пользователи не раскроют свою личность тем, кто не прошёл аналогичный уровень верификации.

План развития: В будущих обновлениях я планирую добавить детальные настройки групп, чтобы точно определять, какие группы могут видеть и быть видимыми (например, разрешить группе A видеть группу B, но не наоборот).

В настоящее время я дорабатываю документацию и планирую опубликовать этот вариант как отдельный «Продвинутый режим приватности» в новой теме, как только получу полный доступ к категории «Компоненты тем».

Тем временем, если кому-то нужна эта двусторонняя логика, вы можете ознакомиться с ней здесь: GitHub: https://github.com/AirVetra/discourse-hidden-user-fields-bidirectional

Ещё раз спасибо за вдохновение!

1 лайк

Всем, кто использует это, как предупреждение: я в итоге выбрал другой путь, отличный от этого компонента темы. Я обнаружил, что термины были видны при поиске, что являлось серьёзной уязвимостью. Добавляю уточнение: «Searchable» относится к каталогу пользователей, а не к поиску по сайту.

Хотите ли вы по-прежнему поддерживать этот компонент, или его следует пометить тегом unmaintained?

1 лайк

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

1 лайк