# Путь к стабильной, а затем постоянной версии granular\_anonymous\_and\_logged\_in\_groups\_permissions

**URL:** https://meta.discourse.org/t/the-road-to-stable-then-permanent-for-granular-anonymous-and-logged-in-groups-permissions/410178
**Category:** Development
**Tags:** upcoming-changes
**Created:** [17.Август.2026 05:43:36 UTC](https://meta.discourse.org/t/the-road-to-stable-then-permanent-for-granular-anonymous-and-logged-in-groups-permissions/410178 "2026-08-17T05:43:36Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)
#### Post date: [17.Август.2026 05:43:36 UTC](https://meta.discourse.org/t/the-road-to-stable-then-permanent-for-granular-anonymous-and-logged-in-groups-permissions/410178/1 "2026-08-17T05:43:36Z")

</div>

Это сопутствующая тема к [Granular group-based permissions for anonymous and logged in users](https://meta.discourse.org/t/granular-group-based-permissions-for-anonymous-and-logged-in-users/402273) , работа над ней ещё ведётся.

* * *

В различных кодовых базах для ядра, плагинов и тем всё ещё есть места, где напрямую используются группа `everyone` или ID группы (`0`), без учёта предстоящих изменений или без использования `user.in_any_groups?` или различных методов guardian, предназначенных для работы с этим.

Для быстрого справки, некоторые ID автоматических групп:

- `0` - `everyone`
- `1` - `admins`
- `2` - `moderators`
- `3` - `staff`
- `4` - `anonymous_users`
- `5` - `logged_in_users`

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

### Проблемы высокого приоритета

Проблема, поднятая Moin:

> [@martin](#):
>
> 1. `anonymous_users` и `logged_in_users` вообще отсутствуют в выборе групп. Думаю, сейчас безопасно разрешить их использование здесь, тогда не будет иметь значения, добавили ли вы `everyone` в `disallowed_groups`, если предстоящее изменение отключено.
> 2. Исправить `Guardian::AnonymousUser#in_any_groups?`, чтобы он учитывал `anonymous_users`, когда предстоящее изменение отключено.
> 3. Добавить такое же алиасирование времени чтения `0 (everyone)` → `5 (logged_in_users)` для настроек тем, как мы делаем это для настроек сайта.

- Ядро
  - О сайте - `apply_excluded_groups` используется только для скрытия выбранных модераторов и администраторов из групп в `about_page_hidden_groups`. Нет смысла использовать псевдогруппы, такие как `0|4|5`, здесь, их следует добавить в `disallowed_groups`. Нам также нужно обновить описание настройки, так как оно вводит в заблуждение.
  - EditCategoryTabsController - В `_wouldLoseAccess` [discourse/frontend/discourse/admin/controllers/edit-category/tabs.js at 86552acfbaf816db3b9db5f761f5e9f2bd221c21 · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/86552acfbaf816db3b9db5f761f5e9f2bd221c21/frontend/discourse/admin/controllers/edit-category/tabs.js#L382-L388) мы смотрим только на видимые группы, это должно быть серверное проверку, как `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](https://github.com/discourse/discourse/commit/699ad46536f619396e73720c7652dbfc7a1f86c0)
  - Изменить значение по умолчанию `resenha_allowed_groups` с `0` на `4|5`

#### Темы

#### Компоненты

### Проблемы низкого приоритета

- Ядро
  - `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`

#### Плагины ядра

- Чат
  - Примечание для `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](https://github.com/discourse/discourse/pull/42610) 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`

#### Темы

#### Компоненты

### Следующие шаги для миграции

- Мигрировать `allowed_group_ids` модели `AiAgent`

---

_[View the full topic](https://meta.discourse.org/t/the-road-to-stable-then-permanent-for-granular-anonymous-and-logged-in-groups-permissions/410178)._
