Мы пытаемся создать региональную версию Discourse, где принадлежность пользователя будет ограничивать его доступ к определённым группам, но в настоящее время это конфликтует с поддержкой анонимных пользователей, так как у них нет никаких ассоциаций с группами.
Этот PR добавляет ассоциацию с группами для анонимных пользователей.
Я рассмотрел атаки по деанонимизации, и вы правы — наследование групп пользователей подходит не всем и особенно уязвимо для инстансов с групповыми принадлежностями высокой кардинальности. Как подробно описано в PR, исходная концепция предполагала поддержку анонимной публикации в региональных группах, которые в нашем инстансе будут неявно иметь низкую кардинальность.
редактирование: я добавил атрибут группы под названием anonymous_user_inheritance, который позволяет администраторам выбирать, наследуется ли группа анонимными пользователями или нет. Также я добавил предупреждение рядом с настройкой администратора для включения функции и открыт к любым дальнейшим предложениям.
Собственно, отдельной категории для запросов на ревью кода нет, поэтому, скорее всего, это наиболее подходящий вариант.
Pull Request’ы обычно приветствуются, однако перед тем, как углубляться в работу, стоит уточнить, планирует ли Discourse развивать это направление или добавлять такую функцию.
В качестве альтернативы можно рассмотреть реализацию этой функции в виде плагина, чтобы она была доступна для использования без внесения изменений в основной код.
Да, но, на мой взгляд, изменять основные таблицы в плагине — плохая практика.
Если вы перенесёте это в плагин, лучше использовать group_custom_fields или собственную выделенную таблицу.
В данном конкретном случае можно также (вместо этого) добавить настройку сайта, например «разрешённые наследуемые группы», и позволить администратору выбрать все группы, которые могут наследоваться, в рамках этой единственной настройки. Это значительно упростит задачу и сосредоточит весь функционал, предоставляемый плагином, в одном месте.
Спасибо за обратную связь, Ричард! Не могли бы вы помочь мне понять ваше второе предложение?
предоставить администратору возможность выбрать все группы, которые могут наследоваться, в рамках одной этой настройки
Чтобы убедиться, что я правильно понял, вы предлагаете создать общую настройку сайта для включения наследования групп, а затем на странице настроек каждой отдельной группы добавить флажок, указывающий, является ли эта группа наследуемой или нет. То есть это похоже на то, что реализовано у меня сейчас, за исключением того, что избыточная настройка будет убрана.
предоставить администратору возможность выбрать все группы, которые могут наследоваться, в рамках одной этой настройки
Вы имели в виду именно это, или у вас были другие идеи? Изначально я планировал создать своего рода инструмент выбора с меню флажков или чем-то подобным, но это очень быстро становится сложным в реализации.
Спасибо также за совет насчёт плагинов! В будущих доработках я рассмотрю вариант с плагином.
Нет, я предлагаю не делать это настройкой на странице группы, а создать одну общесайтовую настройку, содержащую список всех наследуемых групп.
Аналогичная настройка — «Администрирование» → «Настройки» → «Пользователи» → «Разрешённые группы для анонимных публикаций». Это не флажок на странице настроек каждой группы «Разрешить анонимные публикации для этой группы», а одна настройка со списком всех групп, для которых разрешены анонимные публикации.
Или «Администрирование» → «Настройки» → «Публикации» → «Разрешённые группы для упоминаний здесь», вместо флажка на странице настроек каждой группы «Разрешить упоминания здесь для этой группы».
Это проще реализовать, уменьшает загромождение базы данных и обеспечивает лучшую обзорность для администратора форума.