Эта тема является дополнением к Granular group-based permissions for anonymous and logged in users и находится в работе (WIP).
В различных кодовых базах ядра, плагинов и тем всё ещё есть места, где напрямую ссылаются на группу everyone (или ID группы 0), не учитывая предстоящие изменения и не используя user.in_any_groups? или различные методы guardian, предназначенные для работы с этим.
Для быстрой справки, некоторые ID автоматических групп:
0-everyone1-admins2-moderators3-staff4-anonymous_users5-logged_in_users
Эта тема служит центральным местом для отслеживания исправлений этой системы по мере приближения к стабильной версии. Кастомные плагины и темы для клиентов Discourse здесь не отслеживаются, у меня есть отдельный внутренний список для этого.
Проблемы высокой приоритетности
Проблема, поднятая Moin:
- Core (Ядро)
- Раздел «О сайте» —
apply_excluded_groupsиспользуется только для скрытия выбранных модераторов и администраторов из групп вabout_page_hidden_groups. Не имеет смысла использовать псевдогруппы, такие как0|4|5, здесь; их следует добавлять вdisallowed_groups. Также нам нужно обновить описание настройки, так как оно вводит в заблуждение. - EditCategoryTabsController — В
_wouldLoseAccessdiscourse/frontend/discourse/admin/controllers/edit-category/tabs.js at 86552acfbaf816db3b9db5f761f5e9f2bd221c21 · discourse/discourse · GitHub мы смотрим только на видимые группы. Это должно быть серверное проверка, какevaluateдля ACL.
- Раздел «О сайте» —
Плагины ядра
- Discourse Templates
-
can_use_private_templates?по-прежнему напрямую ссылается наeveryoneи не использует сокращение_mapв настройках сайта.
-
- Discourse AI
-
can_see_summary?в расширениях guardian не используетuser.in_any_groups?
-
can_attach?в AiBot::Playground не используетuser.in_any_groups?
-
addTopicAdminMenuButtonвai-translation-topic-adminсмотрит наcurrentUser.groupsна клиенте, что ненадежно. Вместо этого следует выполнять серверную проверку дляcontent_localization_allowed_groups
-
- Discourse Assign. Здесь довольно много проблем.
- Вместо
user_ids_in_groupsвAssignmentPermissionsмы должны использоватьuser_ids_in_groups(Примечание: в оригинале, вероятно, опечатка, так как имена совпадают, но контекст подразумевает использование правильной функции/метода). - В
assign_allowed_on_groupsследует добавить0|4|5вdisallowed_groups, ни одна из этих групп здесь не имеет смысла, важны только конкретные группы.
- Вместо
Другие плагины
- Activity Pub
- Удалить клиентскую проверку
user.groupsи проверкуeveryoneвshowStatusToUser. Изменить значение по умолчаниюactivity_pub_post_status_visibility_groupsна4|5.
- Удалить клиентскую проверку
- Suggested Edits
user_in_suggested_edits_group?должен использоватьuser.in_any_groups?вGuardianExtensions. Добавить1вmandatory_groupsдляsuggested_edits_review_groupsи удалить специальное исключение для администраторов вcan_review_suggested_edits_in_topic_list- Добавить
0|4|5вdisallowed_groupsдляsuggested_edits_review_groupsиsuggested_edits_suggest_groups, эта настройка не предназначена для использования с этими псевдогруппами.
- Resenha
- Удалить обходной путь
untargetable_group_idsвpublic_room_message_bus_targets, так как это было решено в FIX: Handle new pseudogroups in message bus group IDs (#42610) · discourse/discourse@699ad46 · GitHub - Изменить значение по умолчанию
resenha_allowed_groupsс0на4|5
- Удалить обходной путь
Темы
Компоненты
Проблемы низкой приоритетности
- Core (Ядро)
is_in_edit_topic_groupsвTopicGuardianдолжен использовать расширение_mapдля настройки сайта.Roleable#whisperer?должен использоватьuser.in_any_groups?и избавиться от проверки администратора, добавить1в настройкуwhispers_allowed_groupsкакmandatory_values.- Добавить
0|4вdisallowed_groupsдля настройки сайтаallow_solved_in_groups, это касается только личных сообщений. - Добавить
0|4|5вdisallowed_groupsдляabout_page_extra_groups, это должно касаться только конкретных групп на странице «О сайте». - Примечание в
can_view?дляPresenceChannel: нам нужно удалить проверкуGroup::AUTO_GROUPS[:everyone], когда это предстоящее изменение перейдет в статусPermanent.
Плагины ядра
- Chat
- Примечание для
everyone_allowedв различных местах логики авто-вступления/авто-выхода в чате иusers_with_unreads: удалить проверку:everyone, когда это предстоящее изменение перейдет в статусPermanent. - Обновить
chat_allowed_group_idsвChat::Publisher, чтобы удалить специальную псевдогруппу, так как в FIX: Handle new pseudogroups in message bus group IDs - Pull Request #42610 - discourse/discourse - GitHub MessageBus теперь может правильно работать с псевдогруппами.
- Примечание для
- Assign
- Избавиться от
add_model_callback(Group)в plugin.rb, это нерелевантный/мертвый код, который смотрит на имена групп, а не на ID.
- Избавиться от
Другие плагины
- Code Review
- Проверка
can_review_code?дляcode_review_allowed_groupsне использует расширение_mapи не используетuser.in_any_groups?. Добавить1вmandatory_groupsдля этой настройки и избавиться от специальной проверки администратора в guardian. Добавить0|4|5вdisallowed_groups.
- Проверка
- Needs Love
- Проверка
can_needs_love?дляneeds_love_allowed_groupsне использует расширение_mapи не используетuser.in_any_groups?. Добавить1вmandatory_groupsдля этой настройки и избавиться от специальной проверки администратора в guardian. Добавить0|4|5вdisallowed_groups.
- Проверка
- Staff Alias
- Проверка
can_post_as_staff_aliasдляstaff_alias_allowed_groupsне использует расширение_mapи не используетuser.in_any_groups?. Добавить0|4|5вdisallowed_groups.
- Проверка
Темы
Компоненты
Следующие шаги для миграции
TBA (Будет определено)