---
url: /ru/guides/access.md
---
# Контроль доступа Bot

Контроль доступа в Memoh устроен в два слоя:

* **Channel Members** (участники каналов) управляют идентичностями, приходящими из IM-каналов: Telegram, Discord, Feishu, QQ и подобных платформ.
* **Workspace Members** (участники рабочего пространства) управляют зарегистрированными пользователями Memoh в приложении и рабочем пространстве.

Старая модель ACL-правил по-прежнему существует, но теперь это продвинутый движок, стоящий за доступом к чату в каналах. Повседневные изменения стоит начинать с вкладки **Access** Bot, через **Channel Members** и **Workspace Members**.

***

## Ментальная модель

| Слой | Идентичность | Управляет |
|-------|----------|----------|
| **Channel Members** | Идентичность канала, наблюдаемая на IM-платформе | Может ли эта платформенная идентичность общаться с Bot и может ли она управлять Bot командами из IM |
| **Workspace Members** | Зарегистрированный аккаунт пользователя Memoh | Может ли этот пользователь работать с Bot в приложении, читать и записывать файлы, выполнять команды рабочего пространства, управлять настройками Bot |

Эти слои можно связать привязкой аккаунта. Пользователь рабочего пространства привязывает идентичность канала в **Profile -> Connected Accounts**: генерирует одноразовый код и отправляет `/link <code>` любому Bot Memoh в IM. После привязки Memoh знает, что эта IM-идентичность принадлежит этому пользователю рабочего пространства.

Привязка сама по себе не даёт доступа. Она только связывает идентичности. Права по-прежнему берутся из Channel Members, Workspace Members, владения Bot или статуса системного администратора.

***

## Быстрый старт

### Разрешить чат из IM всем

1. Откройте вкладку **Access** Bot.
2. Перейдите в **Channel Members**.
3. Установите **Access Mode** (режим доступа) в **Blacklist Mode** (режим чёрного списка).
4. Оставьте список участников пустым или добавьте только те идентичности, которые хотите заблокировать.

**Blacklist Mode** означает, что действие ACL по умолчанию — `allow`. Общаться могут все, пока не сработает запрещающее правило.

### Разрешить только выбранные IM-идентичности

1. Откройте **Channel Members**.
2. Установите **Access Mode** в **Whitelist Mode** (режим белого списка).
3. Добавьте идентичности каналов, которым доступ разрешён.
4. Держите флажок **Chat** включённым у каждой разрешённой идентичности.

**Whitelist Mode** означает, что действие ACL по умолчанию — `deny`. Общаться могут только те, на кого сработало разрешающее правило.

### Дать доступ веб-пользователю

1. Откройте **Workspace Members**.
2. Добавьте конкретного участника или добавьте **Everyone** (всех).
3. Выберите права, которые должен получить этот участник.

Доступ к рабочему пространству — для зарегистрированных пользователей Memoh. Он не связан с доступом к чату из IM, пока пользователь не привяжет свою IM-идентичность.

***

## Channel Members

**Channel Members** — поверхность управления доступом со стороны IM.

Каждая строка — это **идентичность канала** (один пользователь Telegram или участник Discord) либо **группа** (см. ниже). Участники добавляются из встроенного селектора в шапке карточки; кандидаты-идентичности и кандидаты-группы показываются в одном выпадающем списке, разделённые по секциям. У строки два независимых права:

| Право | Значение |
|------------|---------|
| **Chat** | Могут ли входящие IM-сообщения от этой идентичности запускать Bot. |
| **Manage** | Может ли эта идентичность управлять Bot через слэш-команды в IM. **Manage** не даёт **Chat** автоматически. |

### Chat

За флажком **Chat** стоят ACL-правила для `chat.trigger`.

В **Blacklist Mode**:

* по умолчанию — `allow`
* добавление идентичности или снятие флажка **Chat** создаёт запрещающее правило
* установка флажка **Chat** удаляет запрещающее правило для этой идентичности

В **Whitelist Mode**:

* по умолчанию — `deny`
* добавление идентичности или установка флажка **Chat** создаёт разрешающее правило
* снятие флажка **Chat** удаляет разрешающее правило для этой идентичности

### Manage

Флажок **Manage** записывает локальное переопределение Channel Access для этой идентичности канала.

**Manage** используется командами в IM. Оно позволяет идентичности канала действовать как управляющий Bot в слэш-командах уровня владельца. Оно намеренно независимо от **Chat**: управляющему всё равно могут быть запрещены обычные сообщения, если **Chat** выключен или ACL их отклоняет.

### Группы как участники

Помимо отдельных идентичностей, строкой участника можно добавить целый **групповой чат**. Кандидаты-группы берутся из разговоров, которые Bot наблюдал в своих каналах; такие строки помечены значком «Group».

* Флажок **Chat** у строки группы означает «все в этой группе»: в **Whitelist Mode** он разрешает всей группе запускать Bot, в **Blacklist Mode** — блокирует всю группу.
* **Manage для групп недоступно.** Управляющие — всегда отдельные идентичности каналов.
* Комбинированные правила — «этот человек, в этой группе» — по-прежнему возможны через продвинутые ACL-правила.

### Платформенные участники

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

Когда у привязанного участника рабочего пространства есть **Manage** в **Workspace Members**, идентичность канала наследует **Manage** автоматически. Строка в Channel Members тогда показывает, что **Manage** унаследовано. Если вы переключите **Manage** в Channel Members, Memoh запишет локальное переопределение:

* локальное **включено** принудительно даёт этой идентичности канала **Manage**
* локальное **выключено** подавляет унаследованное **Manage** для этой идентичности канала
* **Reset to inherited** удаляет локальное переопределение и снова следует за Workspace Members

Из Channel Members можно удалять только чисто локальные строки каналов. Строки платформенных участников происходят из привязки к рабочему пространству и управляются правами или отключением привязки.

***

## Workspace Members

**Workspace Members** — поверхность управления доступом со стороны веба и рабочего пространства.

Доступ можно выдать:

* **конкретному участнику**
* **Everyone** (всем)

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

Права рабочего пространства:

| Право | Разрешает |
|------------|--------|
| **Can chat** | Пользоваться Bot в веб-чатах. |
| **Read files** | Читать файлы рабочего пространства Bot. |
| **Write files** | Изменять файлы рабочего пространства Bot. Включает в себя **Read files**. |
| **Run commands** | Запускать выполнение команд в рабочем пространстве. |
| **Can manage** | Управлять настройками и доступом Bot. Включает в себя все остальные права рабочего пространства. |

**Can manage** в рабочем пространстве перетекает и в Channel Members для привязанных идентичностей каналов. Если пользователь с правом управления в рабочем пространстве привяжет идентичность Telegram, эта идентичность Telegram унаследует **Manage** на стороне канала.

**Can chat** в рабочем пространстве — это не то же самое, что **Chat** в канале. Права рабочего пространства авторизуют API приложения и рабочего пространства; **Chat** канала авторизует входящие IM-сообщения через движок ACL.

***

## Привязка идентичностей каналов

Пользователи привязывают IM-идентичности в **Profile -> Connected Accounts**:

1. Нажмите **Connect**.
2. Скопируйте сгенерированную команду `/link <code>`.
3. Отправьте её любому Bot Memoh в IM-канале.
4. Код привяжет идентичность канала отправителя к текущему аккаунту пользователя Memoh.

Важные детали:

* коды привязки одноразовые и истекают через короткое время
* `/link <code>` разрешён, даже когда отправитель отклонён чат-ACL, — так пользователи могут выбраться из непривязанного состояния
* привязка действует на уровне аккаунта: она глобально связывает пользователя рабочего пространства и идентичность канала
* привязка сама по себе не даёт ни **Chat**, ни **Manage**

После привязки соответствующая строка в Channel Members может унаследовать право управления из рабочего пространства.

***

## Access Mode и продвинутые ACL-правила

Чат каналов использует движок ACL. Страница Access представляет его как **Access Mode** плюс необязательные продвинутые правила.

| Access Mode | Действие ACL по умолчанию | Правила, которые имеют значение |
|-------------|--------------------|----------------------------|
| **Blacklist Mode** | `allow` | правила `deny` |
| **Whitelist Mode** | `deny` | правила `allow` |

Режим по умолчанию переопределяют только правила с действием, противоположным текущему. Правило с тем же действием, что и у режима по умолчанию, результата не меняет.

Продвинутые правила могут быть нацелены на:

* всех пользователей
* всех пользователей на платформе
* одну идентичность канала
* одну идентичность канала на платформе

Продвинутые правила можно также ограничить по области:

* любой чат
* личные разговоры
* групповые разговоры
* треды
* конкретный ID разговора
* конкретный ID треда

Цель правила отвечает за фильтрацию по платформе. Область источника — за фильтрацию по разговору и треду.

В отличие от прежней документации по ACL, текущие версии не предоставляют ручного приоритета правил и перетаскивания для сортировки. Думайте в терминах «текущий режим по умолчанию плюс сработавшие правила противоположного действия».

***

## Пресеты при создании

Пресет ACL при создании Bot инициализирует только поведение чата каналов. Позже его можно изменить из **Channel Members**.

| Пресет | Начальное поведение |
|--------|------------------|
| `allow_all` | Действие по умолчанию `allow`; без дополнительных правил |
| `private_only` | Действие по умолчанию `deny`; разрешены личные разговоры |
| `group_only` | Действие по умолчанию `deny`; разрешены групповые разговоры |
| `group_and_thread_only` | Действие по умолчанию `deny`; разрешены группы и треды |
| `deny_all` | Действие по умолчанию `deny`; без дополнительных разрешающих правил |

Пресеты не настраивают Workspace Members и не создают привязок аккаунтов.

***

## Примеры

### Публичный IM-Bot с парой блокировок

Используйте **Blacklist Mode** в Channel Members. Оставьте **Chat** включённым по умолчанию и добавьте блокируемые идентичности. Продвинутые правила нужны, только если требуется заблокировать целую платформу или контекст группы либо треда.

### Приватный IM-Bot

Используйте **Whitelist Mode** в Channel Members. Добавьте разрешённые идентичности каналов и держите **Chat** включённым. Если те же люди должны управлять Bot из IM, выдайте им ещё и **Manage**.

### Командный веб-Bot

Используйте **Workspace Members**. Добавьте конкретных пользователей или **Everyone**, затем выберите **Can chat**, файловые права, выполнение команд и **Can manage** в соответствии с их ролью в вебе и рабочем пространстве.

### Управляющий рабочим пространством управляет и из Telegram

Выдайте пользователю **Can manage** в Workspace Members. Попросите его привязать аккаунт Telegram через `/link <code>`. Его идентичность Telegram унаследует **Manage** в Channel Members. Если нужно отключить управление со стороны Telegram только для этой идентичности, выключите **Manage** в Channel Members — создастся локальное переопределение.

***

## Отладка

Когда результат доступа удивляет, проверяйте по порядку:

1. **Какой слой задействован?** IM-сообщения идут через чат-ACL каналов. API приложения и рабочего пространства — через Workspace Members.
2. **Привязана ли идентичность?** Connected Accounts определяет, может ли управление из рабочего пространства унаследоваться в Channel Members.
3. **Какой сейчас Access Mode у канала?** **Blacklist Mode** по умолчанию разрешает; **Whitelist Mode** по умолчанию запрещает.
4. **Manage унаследовано или переопределено?** Информационное окно в Channel Members показывает, следует ли **Manage** за Workspace Members или переопределено локально.
5. **Что показывает `/access`?** В IM команда `/access` сообщает текущую идентичность, право записи и контекст чат-ACL отправителя.

Помните, что **Manage** и **Chat** раздельны. **Manage** может разрешать IM-команды уровня владельца, но обычный входящий чат всё равно требует, чтобы **Chat** канала пропустил отправителя.
