Skip to content

Контроль доступа 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 Modeallowправила deny
Whitelist Modedenyправила 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 канала пропустил отправителя.

Published under AGPLv3