Я немного запутался в том, как работает видимость автоматических групп. На данный момент речь идет только о директории /groups.
Вот что я наблюдаю на свежей установке 2.7.0.beta4:
Если пользователь с правами администратора или модератора заходит в /groups, он видит все 8 автоматических групп (admins, moderators, staff, trust_level_[0-4]).
Если пользователь не является администратором или модератором (независимо от уровня доверия), заходя в /groups, он видит только группу moderators.
Однако у всех этих групп одинаковые настройки видимости по умолчанию:
Кто может видеть эту группу? Зарегистрированные пользователи
Кто может видеть участников этой группы? Все
Так и должно быть? Или же есть проблема с обработкой параметров видимости для этих групп?
Код переопределяет настройки видимости групп для автоматических групп, когда страница групп просматривается пользователем, не являющимся сотрудником. Будет отображена только группа модераторов.
Не относится к данной проблеме, но когда я попытался превратить ссылку на GitHub, которую я опубликовал выше, в предпросмотр (onebox), код был отображён в предпросмотре без какого-либо форматирования:
Ну, это объясняет ситуацию. И я уверен, что этот код был написан с наилучшими намерениями, но он работает некорректно, потому что:
Возможно, я хочу, чтобы были видны и другие автоматические группы (кроме Модераторов).
Интерфейс управления автоматическими группами позволяет мне устанавливать видимость для автоматических групп, не являющихся группами Модераторов, но эта настройка игнорируется.
Было бы довольно просто просто удалить этот блок кода (и эту милою опечатку, которая просуществовала последние 6 лет).
Сложный момент, если кто-то считает это необходимым, — изменить текущую настройку видимости для автоматических групп на «Владельцы групп», чтобы эти группы случайно не появились для всех установок, где они привыкли к тому, что их принудительно скрывают. Не знаю, есть ли в Discourse какой-то механизм для внесения таких изменений во время обновления — но это именно тот тип задач, который нужно решать при изменениях схемы данных, так что что-то подобное должно существовать.
Также: такое поведение «просто скроем автоматические группы в каталоге групп, несмотря на настройки видимости» плохо тем, что оно скрывает другие аспекты visibility_level, которые всё ещё имеют смысл. Например:
Администратор X пробует настройки видимости и понимает, что пользователи без прав персонала не видят trust_level_0 в каталоге групп, независимо от настроек.
Поэтому… Администратор X оставляет visibility_level и member_visibility_level установленными в значение «Все», поскольку эти настройки, как кажется, не имеют никакого эффекта.
Анонимный пользователь Z переходит по адресу /groups/trust_level_0 и получает список всех пользователей на сайте.
Возможно, Администратору X это важно, а возможно, нет, но в любом случае Администратор X будет удивлён, что это было возможно.
Неуместные интересные факты, о которых я не знал до сих пор
Распределение пользователей meta.discourse по уровням доверия: