Контроль доступа 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 всем
- Откройте вкладку Access Bot.
- Перейдите в Channel Members.
- Установите Access Mode (режим доступа) в Blacklist Mode (режим чёрного списка).
- Оставьте список участников пустым или добавьте только те идентичности, которые хотите заблокировать.
Blacklist Mode означает, что действие ACL по умолчанию — allow. Общаться могут все, пока не сработает запрещающее правило.
Разрешить только выбранные IM-идентичности
- Откройте Channel Members.
- Установите Access Mode в Whitelist Mode (режим белого списка).
- Добавьте идентичности каналов, которым доступ разрешён.
- Держите флажок Chat включённым у каждой разрешённой идентичности.
Whitelist Mode означает, что действие ACL по умолчанию — deny. Общаться могут только те, на кого сработало разрешающее правило.
Дать доступ веб-пользователю
- Откройте Workspace Members.
- Добавьте конкретного участника или добавьте Everyone (всех).
- Выберите права, которые должен получить этот участник.
Доступ к рабочему пространству — для зарегистрированных пользователей 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:
- Нажмите Connect.
- Скопируйте сгенерированную команду
/link <code>. - Отправьте её любому Bot Memoh в IM-канале.
- Код привяжет идентичность канала отправителя к текущему аккаунту пользователя 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 — создастся локальное переопределение.
Отладка
Когда результат доступа удивляет, проверяйте по порядку:
- Какой слой задействован? IM-сообщения идут через чат-ACL каналов. API приложения и рабочего пространства — через Workspace Members.
- Привязана ли идентичность? Connected Accounts определяет, может ли управление из рабочего пространства унаследоваться в Channel Members.
- Какой сейчас Access Mode у канала? Blacklist Mode по умолчанию разрешает; Whitelist Mode по умолчанию запрещает.
- Manage унаследовано или переопределено? Информационное окно в Channel Members показывает, следует ли Manage за Workspace Members или переопределено локально.
- Что показывает
/access? В IM команда/accessсообщает текущую идентичность, право записи и контекст чат-ACL отправителя.
Помните, что Manage и Chat раздельны. Manage может разрешать IM-команды уровня владельца, но обычный входящий чат всё равно требует, чтобы Chat канала пропустил отправителя.