Разрешить анонимным пользователям наследовать родительские группы пользователей

Привет!

Не могли бы вы, пожалуйста, проверить этот PR?

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

Этот PR добавляет ассоциацию с группами для анонимных пользователей.

1 лайк

Вы учитывали повышенный риск атак на деанонимизацию, которые это может позволить?

2 лайка

Спасибо за поднятие этой темы!

Я рассмотрел атаки по деанонимизации, и вы правы — наследование групп пользователей подходит не всем и особенно уязвимо для инстансов с групповыми принадлежностями высокой кардинальности. Как подробно описано в PR, исходная концепция предполагала поддержку анонимной публикации в региональных группах, которые в нашем инстансе будут неявно иметь низкую кардинальность.

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

1 лайк

Это правильная категория для запроса ревью PR или мне стоит разместить сообщение в другой категории?

Спасибо!

1 лайк

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

Pull Request’ы обычно приветствуются, однако перед тем, как углубляться в работу, стоит уточнить, планирует ли Discourse развивать это направление или добавлять такую функцию.

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

2 лайка

Спасибо за совет! Плагин действительно подошёл бы нам, но это изменение требует миграции базы данных. Возможно ли выполнить миграцию в рамках плагина?

1 лайк

Да, вы можете выполнять миграции базы данных в плагине.

1 лайк

Да, но, на мой взгляд, изменять основные таблицы в плагине — плохая практика.

Если вы перенесёте это в плагин, лучше использовать group_custom_fields или собственную выделенную таблицу.

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

5 лайков

Спасибо за обратную связь, Ричард! Не могли бы вы помочь мне понять ваше второе предложение?

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

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

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

Спасибо также за совет насчёт плагинов! В будущих доработках я рассмотрю вариант с плагином. :grinning_face:

1 лайк

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

Аналогичная настройка — «Администрирование» → «Настройки» → «Пользователи» → «Разрешённые группы для анонимных публикаций». Это не флажок на странице настроек каждой группы «Разрешить анонимные публикации для этой группы», а одна настройка со списком всех групп, для которых разрешены анонимные публикации.

Или «Администрирование» → «Настройки» → «Публикации» → «Разрешённые группы для упоминаний здесь», вместо флажка на странице настроек каждой группы «Разрешить упоминания здесь для этой группы».

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

3 лайка