МСП и агенты
МСП в Gigma ERP — это режим, где в одной платформе живёт много разных бизнесов.
Главное правило простое:
Один проект = один бизнес = один хозяин = свои данные.
Backend должен проверять это правило при каждом чтении и при каждой записи. Если пользователь или агент из проекта A, он не должен видеть, менять или удалять данные проекта B.
Что такое проект
Проект — это граница бизнеса внутри ERP.
К проекту относятся:
- пользователи;
- роли и права;
- отделы и филиалы;
- заказы;
- звонки;
- контрагенты;
- контакты и банковские реквизиты;
- меню;
- интеграции.
Если проще: проект — это “комната бизнеса”. У каждого бизнеса своя комната. Агент получает ключ только от одной комнаты.
Как работает стена между бизнесами
Когда приходит запрос, backend делает три шага:
- Смотрит на токен и понимает, кто делает запрос.
- Находит проект этого пользователя.
- Проверяет, что объект запроса тоже из этого проекта.
Если проекты разные, запрос закрывается.
Обычно API вернёт:
403— доступ запрещён;404— объект не найден для этого пользователя;422— запрос понятен, но бизнес-правило нарушено.
Почему нельзя доверять id
id — это только номер записи в базе. Его можно угадать или случайно получить из чужого сценария.
Поэтому агент не должен думать так:
У меня есть order_id = 15, значит я могу открыть заказ 15. Правильная логика:
У меня есть order_id = 15.
Backend должен проверить, что заказ 15 принадлежит моему проекту.
Если не принадлежит — я останавливаюсь. Как агент получает доступ
Агент входит как обычный пользователь ERP.
Рекомендуемая схема:
- Создать отдельного пользователя для агента внутри проекта.
- Дать ему отдельную роль, например
agent,managerилиoperator. - Выдать только нужные права.
- Получить пароль через
POST /api/send_password. - Войти через
POST /api/loginи получить токен. - Отправлять этот токен в каждом запросе.
Токен — это временный ключ доступа. Его нужно хранить как пароль.
Отправка пароля агенту
- Метод
- POST
- URL
https://api.gigma.ru/api/send_password- Авторизация
- Не требуется
- Headers
Accept: application/json; Content-Type: application/json
Параметры запроса
login(string, обязательно) — e-mail существующего пользователя агента
Пример запроса
{
"login": "agent@example.com"
} Ответ
При успешном действии API отправляет пароль на e-mail пользователя.
{
"message": "Password successfully send"
} Важно
Пароль действует ограниченное время. Если агент попробует войти без свежего пароля, API вернёт ошибку Send password before login. Password TTL is 5 minutes.
Вход агента в ERP
- Метод
- POST
- URL
https://api.gigma.ru/api/login- Авторизация
- Не требуется
- Headers
Accept: application/json; Content-Type: application/json
Параметры запроса
login(string, обязательно) — e-mail пользователя агентаpassword(string, обязательно) — пароль из письма послеPOST /api/send_passworddevice(string, необязательно) — имя устройства или интеграции, напримерsales-agent
Пример запроса
{
"login": "agent@example.com",
"password": "123456",
"device": "sales-agent"
} Ответ
В ответе приходит пользователь и токен доступа.
{
"user": {
"access_token": {
"value": "28|example-token"
},
"id": 25,
"login": "agent@example.com",
"role": {
"name": "agent"
},
"permissions": []
}
} Как использовать токен
Во всех следующих запросах агент передаёт токен в заголовке:
Authorization: Bearer 28|example-tokenПроверка текущего пользователя агента
- Метод
- GET
- URL
https://api.gigma.ru/api/user- Авторизация
- Bearer-токен пользователя ERP
- Headers
Accept: application/json; Authorization: Bearer <token>
Зачем нужен запрос
Этот запрос помогает агенту понять, под кем он сейчас работает: какой пользователь, какая роль, какие права.
Пример ответа
{
"user": {
"id": 25,
"login": "agent@example.com",
"role": {
"name": "agent"
},
"permissions": [
{
"name": "view-orders"
}
]
}
}Как научить агента работать с МСП
Агенту нужна не “супер-админка”, а инструкция поведения.
Минимальная инструкция:
Ты работаешь только внутри проекта своего токена.
Не выбирай project_id сам.
Не пытайся открыть чужой id.
Если API вернул 403 или 404 — это не твоя зона.
Перед записью проверяй, что объект получен из текущего проекта.
Для опасных действий проси подтверждение человека. Что агент может делать
Если у агента есть токен пользователя проекта и нужные права, он может:
- смотреть свои заказы;
- создавать или обновлять свои рабочие данные;
- работать со звонками своего проекта;
- читать своих контрагентов;
- добавлять контакты и реквизиты только своим контрагентам;
- работать с меню и интеграциями своего проекта;
- выполнять внутренние операции, которые разрешены его ролью.
Что агент не должен делать
Агент не должен:
- использовать общий системный токен для всех бизнесов;
- сам подставлять чужой
project_id; - открывать заказ, звонок, контакт или реквизиты по случайному
id; - получать роль
owner, если ему достаточно роли оператора; - видеть токены, платежные данные или чувствительные поля без отдельного права;
- повторять опасное действие автоматически после неизвестной ошибки.
Хорошая роль для агента
Для production лучше заводить отдельную роль agent.
Пример набора прав:
view-orders— читать заказы;edit-orders— менять заказы, если агенту это реально нужно;view-counterparties— читать контрагентов;edit-counterparties— менять контрагентов, контакты и реквизиты, если это входит в сценарий;view-communications— читать коммуникации;edit-communications— менять коммуникации;view-tasks— читать задачи;edit-tasks— менять задачи.
Обычно агенту не надо давать:
edit-users— управление пользователями;edit-roles— управление ролями;edit-permissions— управление правами;edit-admins— управление администраторами;edit-applications— изменение приложений и витрин без отдельного сценария.
Если агенту нужны деньги, платежи или массовые изменения, лучше делать отдельный режим с подтверждением человека.
Безопасный сценарий работы
Пример правильного сценария:
- Агент получает пароль через
/api/send_password. - Агент входит через
/api/login. - Получает токен.
- Проверяет себя через
/api/user. - Берёт список доступных заказов через обычный ERP API.
- Работает только с теми
id, которые получил из своего списка. - Если API вернул
403,404или422, не обходит ошибку, а сообщает человеку.
Полная схема ручек для агента
Агент использует обычные ERP-ручки. Отличие агента от фронта не в URL, а в роли, правах и инструкции поведения.
Эта схема описывает ERP-агента под auth:user. Публичные E-Commerce ручки клиента под auth:counterparty сюда не входят.
Базовый URL:
https://api.gigma.ru/api Все рабочие ручки ниже, кроме входа, требуют заголовок:
Authorization: Bearer <token> Как читать таблицы ниже
resource означает стандартный набор:
| Действие | Метод и путь |
|---|---|
| список | GET /api/<resource> |
| создание | POST /api/<resource> |
| одна запись | GET /api/<resource>/{id} |
| изменение | PUT/PATCH /api/<resource>/{id} |
| удаление | DELETE /api/<resource>/{id} |
Если у ручки нет удаления, это указано отдельно.
Если агенту нужна только безопасная выдача данных, ниже пишем явные GET, а не resource.
Уровни доступа агента
| Уровень | Значение |
|---|---|
| Можно | нормальная рабочая ручка для агента при наличии нужного права |
| Осторожно | можно давать только под конкретный сценарий |
| Обычно нельзя | это админская, системная или опасная зона |
| Не агентская | вход для внешней системы, а не для агента с Bearer-токеном |
Вход и сессия
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Можно | POST /api/send_password | отправить пароль агенту на e-mail | не требуется |
| Можно | POST /api/login | получить Bearer-токен | не требуется |
| Можно | GET /api/user | проверить текущего пользователя, роль и права | любой auth:user |
| Можно | POST /api/user/logout | удалить активные токены пользователя | любой auth:user |
Заказы
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Можно | resource /api/orders без DELETE | список, просмотр, создание и изменение заказов | view-orders для чтения, edit-orders для записи |
| Можно | GET /api/tables/orders | табличный список заказов для ERP-интерфейса | view-orders или edit-orders |
| Осторожно | POST /api/orders/{order}/request-refund | запрос на возврат | edit-orders, плюс сценарий подтверждения человеком |
| Осторожно | POST /api/orders/{order}/files | прикрепить файл к заказу | edit-orders |
| Можно | GET /api/orders/{order}/history | история заказа | доступ к своему заказу |
| Осторожно | resource /api/orders/{order}/nomenclatures | позиции/номенклатура заказа | свой заказ, обычно edit-orders |
| Можно | POST /api/orders/calculator | расчёт цены | любой авторизованный пользователь с доступом к своим данным |
МСП-стена: заказ должен принадлежать проекту агента. Чужой order_id не должен открываться.
Звонки и коммуникации
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Можно | GET /api/calls | список звонков своего проекта | view-communications или edit-communications |
| Можно | GET /api/calls/{call} | один звонок | view-communications или edit-communications |
| Можно | PUT/PATCH /api/calls/{call} | изменить звонок | edit-communications |
| Можно | GET /api/tables/calls | табличный список звонков | view-communications или edit-communications |
| Не агентская | POST /api/calls | входящий webhook телефонии | секрет webhook-а, не Bearer-токен агента |
МСП-стена: звонок, заказ и контрагент внутри звонка должны быть из проекта агента.
Контрагенты, контакты и реквизиты
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Можно | resource /api/counterparties | клиенты и контрагенты проекта | view-counterparties для чтения, edit-counterparties для записи |
| Можно | GET /api/tables/counterparties | табличный список контрагентов | view-counterparties или edit-counterparties |
| Можно | resource /api/counterparties/{counterparty}/contacts | контакты конкретного контрагента | чтение/запись через права контрагента |
| Можно | resource /api/counterparties/{counterparty}/bank_requisites | банковские реквизиты контрагента | чтение/запись через права контрагента |
| Можно | GET /api/counterparties/{counterparty}/history | история контрагента | доступ к своему контрагенту |
| Можно | GET /api/managers | список менеджеров для фильтров | авторизованный пользователь проекта |
МСП-стена: вложенный контакт или реквизит должен принадлежать указанному контрагенту, а контрагент должен принадлежать проекту агента.
Задачи
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Можно | GET /api/tasks | список задач своего проекта | view-tasks или edit-tasks |
| Можно | GET /api/tables/tasks | табличный список задач | view-tasks или edit-tasks |
| Осторожно | GET /api/tasks/{task} | одна задача | view-tasks или edit-tasks, плюс проверка проекта задачи |
| Осторожно | POST /api/tasks | создать задачу в своём проекте | edit-tasks |
| Осторожно | PUT/PATCH /api/tasks/{task} | изменить задачу | edit-tasks, плюс проверка проекта задачи |
МСП-стена: список фильтруется по проекту агента. Для просмотра и изменения конкретной задачи нельзя доверять одному task_id: сначала подтвердить, что задача из проекта агента.
Пользователи, роли, права, отделы и филиалы
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Осторожно | resource /api/users | пользователи проекта | view-users для чтения, edit-users для записи |
| Осторожно | resource /api/branches | филиалы проекта | edit-branches |
| Осторожно | resource /api/departments | отделы проекта | edit-departments |
| Обычно нельзя | resource /api/roles | роли проекта | edit-roles |
| Обычно нельзя | resource /api/permissions | права доступа | edit-permissions |
| Обычно нельзя | POST /api/users/{user}/attach_menu | привязать меню пользователю | управление пользователями/меню |
| Обычно нельзя | POST /api/attach_menu_to_project | привязать меню проекту | проектное администрирование |
| Обычно нельзя | POST /api/users/{user}/create_menu_from_user_items | создать меню из пользовательских пунктов | проектное администрирование |
Для обычного агента эти ручки не нужны. Их стоит давать только агенту-администратору и только в одном проекте.
Интеграции пользователя и филиала
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Осторожно | GET /api/users/{user}/integrations | интеграции пользователя | свой проект, обычно админский сценарий |
| Осторожно | GET /api/users/{user}/integrations/{integration} | одна интеграция пользователя | свой проект |
| Осторожно | PUT/PATCH /api/users/{user}/integrations/{integration} | изменить интеграцию пользователя | свой проект |
| Осторожно | resource /api/users/{user}/integrations/{integration}/parameters только index/store/show/destroy | параметры интеграции пользователя | свой проект |
| Осторожно | resource /api/branches/{branch}/bank_requisites | реквизиты филиала | филиал своего проекта |
| Осторожно | resource /api/branches/{branch}/bank_requisites/{bank_requisite}/integrations только index/show/update | интеграции реквизитов филиала | филиал своего проекта |
| Осторожно | resource /api/branches/{branch}/bank_requisites/{bank_requisite}/integrations/{integration}/parameters только index/store/show/destroy | параметры интеграций реквизитов филиала | филиал своего проекта |
МСП-стена: user, branch, bank_requisite и integration должны быть внутри проекта агента.
Меню
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Осторожно | resource /api/menus | меню проекта | проектное администрирование |
| Можно | GET /api/menus/default/items | дефолтные пункты меню | авторизованный пользователь |
| Осторожно | resource /api/menus/{menu}/items только index/store/show/update/destroy | пункты конкретного меню | меню своего проекта |
МСП-стена: проектное меню не должно смешиваться с глобальными шаблонами и чужими пользовательскими пунктами.
Справочники и таблицы для чтения
Эти ручки обычно нужны агенту для выбора значений в формах и фильтрах.
В этом разделе разрешено только чтение. POST, PUT/PATCH и DELETE по справочникам давать отдельно и только под задачу администратора.
| Уровень | Ручка | Зачем |
|---|---|---|
| Можно | GET /api/screens, GET /api/screens/{id} | экраны/разделы |
| Можно | GET /api/file_types, GET /api/file_types/{id} | типы файлов |
| Можно | GET /api/counterparty_types, GET /api/counterparty_types/{id} | типы контрагентов |
| Можно | GET /api/call_statuses, GET /api/call_statuses/{id} | статусы звонков |
| Можно | GET /api/communication_types, GET /api/communication_types/{id} | типы коммуникаций |
| Можно | GET /api/sales_channels, GET /api/sales_channels/{id} | каналы продаж |
| Можно | GET /api/order_statuses, GET /api/order_statuses/{id} | статусы заказов |
| Можно | GET /api/task_statuses, GET /api/task_statuses/{id} | статусы задач |
| Можно | GET /api/cities, GET /api/cities/{id} | города |
| Можно | GET /api/countries, GET /api/countries/{id} | страны |
| Можно | GET /api/brands, GET /api/brands/{id} | бренды |
| Можно | GET /api/integration_types, GET /api/integration_types/{id} | типы интеграций |
| Можно | GET /api/integrations, GET /api/integrations/{id} | интеграции |
| Можно | GET /api/storage_units, GET /api/storage_units/{id} | единицы хранения |
| Можно | GET /api/branches_list | список филиалов |
| Можно | GET /api/responsible_users | ответственные пользователи |
| Можно | GET /api/categories/creators | создатели категорий |
Если справочник начинает менять деньги, доступы или витрины, переводить его из “можно” в “осторожно”.
Номенклатура, склады и остатки
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Осторожно | resource /api/categories | категории номенклатуры | view-categories, create-categories, edit-categories |
| Осторожно | GET /api/tags | теги номенклатуры | справочник тегов, не считать проектной стеной без отдельной проверки |
| Осторожно | POST /api/nomenclatures/export | экспорт номенклатуры | view-nomenclatures или edit-nomenclatures |
| Осторожно | POST /api/nomenclatures/import | импорт номенклатуры | опасная массовая операция |
| Осторожно | resource /api/nomenclatures | товары/услуги | view-nomenclatures, create-nomenclatures, edit-nomenclatures |
| Осторожно | resource /api/nomenclatures/{nomenclature}/compositions только index/store/update/destroy | состав карточки | номенклатура своего проекта |
| Осторожно | resource /api/warehouses | склады | view-warehouses, create-warehouses, edit-warehouses |
| Осторожно | resource /api/inventories | остатки | проектная фильтрация склада/номенклатуры; отдельной policy нет |
| Осторожно | POST /api/inventories/upload | импорт остатков | опасная массовая операция |
| Осторожно | resource /api/warehouses/{warehouse}/integrations | интеграции склада | склад своего проекта |
| Осторожно | resource /api/warehouses/{warehouse}/integrations/{integration}/parameters | параметры интеграции склада | склад своего проекта |
| Осторожно | resource /api/warehouses/{warehouse}/nomenclatures | остатки номенклатуры на складе | склад своего проекта |
| Можно | GET /api/tables/nomenclatures | табличная номенклатура | view-nomenclatures или edit-nomenclatures |
| Можно | GET /api/tables/warehouses | табличные склады | view-warehouses или edit-warehouses |
| Можно | GET /api/tables/inventories | табличные остатки | проектная фильтрация склада/номенклатуры |
| Можно | GET /api/tables/reservations | табличные резервы | проектная фильтрация склада/номенклатуры |
Важно: часть inventory-permissions (view-nomenclatures, view-warehouses, view-shops и похожие) может не быть заведена базовым seeder-ом. Перед выдачей агенту проверить конкретную роль в БД. Для агента безопаснее начинать с чтения. Импорт и массовые изменения лучше делать только после подтверждения человека.
Магазины, приложения, страницы и витрина
| Уровень | Ручка | Зачем | Право |
|---|---|---|---|
| Осторожно | resource /api/shops | магазины/точки продаж | view-shops, create-shops, edit-shops |
| Осторожно | apiResource /api/shops/{shop}/hours | часы работы магазина | shop своего проекта, обычно edit-shops |
| Осторожно | GET/POST /api/shops/{shop}/holidays | праздники магазина | shop своего проекта, обычно edit-shops |
| Осторожно | apiResource /api/shops/{shop}/exceptions | исключения графика | shop своего проекта, обычно edit-shops |
| Осторожно | resource /api/applications | приложения/витрины | view-applications, create-applications, edit-applications |
| Осторожно | resource /api/applications/{application}/categories | категории витрины | приложение своего проекта |
| Осторожно | POST /api/applications/{application}/categories/{category}/up/down | сортировка категорий | приложение своего проекта |
| Осторожно | resource /api/applications/{application}/brands | бренды витрины | приложение своего проекта |
| Осторожно | POST /api/applications/{application}/brands/{brand}/up/down | сортировка брендов | приложение своего проекта |
| Осторожно | POST /api/applications/{application}/warehouses/{warehouse}/up/down | сортировка складов витрины | приложение и склад своего проекта |
| Осторожно | resource /api/applications/{application}/blocks | блоки витрины | приложение своего проекта |
| Осторожно | resource /api/applications/{application}/menu_items | меню витрины | приложение своего проекта |
| Осторожно | POST /api/applications/{application}/menu_items/{menu_item}/up/down | сортировка меню витрины | приложение своего проекта |
| Осторожно | resource /api/pages | страницы | проектный доступ, влияет на витрину |
| Можно | GET /api/tables/applications | табличные приложения | view-applications или edit-applications |
| Можно | GET /api/tables/shops | табличные магазины | view-shops или edit-shops |
| Можно | GET /api/tables/pages | табличные страницы | проектный доступ, только чтение |
Важно: shop-permissions (view-shops, create-shops, edit-shops) тоже проверить в роли/БД перед выдачей агенту. Эта зона меняет то, что видит клиент в витрине. Для обычного агента лучше только чтение.
Webhooks приложений
| Уровень | Ручка | Зачем |
|---|---|---|
| Осторожно | GET /api/applications/{application}/webhooks | список webhook-ов приложения |
| Осторожно | POST /api/applications/{application}/webhooks | создать webhook |
| Осторожно | GET /api/applications/{application}/webhooks/{webhook} | посмотреть webhook |
| Осторожно | PATCH /api/applications/{application}/webhooks/{webhook} | изменить webhook |
| Осторожно | DELETE /api/applications/{application}/webhooks/{webhook} | удалить webhook |
| Осторожно | GET /api/applications/{application}/webhooks/{webhook}/deliveries | доставки webhook-а |
| Осторожно | POST /api/applications/{application}/webhooks/{webhook}/deliveries/{delivery}/resend | повторить доставку |
| Обычно нельзя | POST /api/applications/{application}/webhooks/{webhook}/rotate-secret | сменить секрет webhook-а |
Webhook-и могут отправлять данные наружу. В backend доступ к ним ограничен проектом приложения и ролью owner/admin. Агенту давать только при явной задаче интеграции.
Файлы, Dadata и вспомогательные запросы
| Уровень | Ручка | Зачем |
|---|---|---|
| Осторожно | GET /api/files | список файлов |
| Осторожно | GET /api/files/{file} | один файл |
| Осторожно | POST /api/files | загрузить файл |
| Осторожно | POST /api/files/{file} | обновить файл |
| Осторожно | DELETE /api/files/{file} | удалить файл |
| Можно | POST /api/search_address | поиск адреса |
| Можно | POST /api/search_company | поиск компании |
| Можно | POST /api/search_bank | поиск банка |
| Можно | POST /api/search_nomenclature | поиск номенклатуры |
Файлы могут содержать персональные или финансовые данные, поэтому права на них стоит давать отдельно. В текущей policy список и загрузка требуют edit-users, а один файл можно смотреть, менять и удалять только его создателю.
История
| Уровень | Ручка | Зачем |
|---|---|---|
| Можно | GET /api/users/{user}/history | история пользователя своего проекта |
| Можно | GET /api/branches/{branch}/history | история филиала своего проекта |
| Можно | GET /api/counterparties/{counterparty}/history | история контрагента своего проекта |
| Можно | GET /api/applications/{application}/history | история приложения своего проекта |
| Можно | GET /api/categories/{category}/history | история категории своего проекта |
| Можно | GET /api/warehouses/{warehouse}/history | история склада своего проекта |
| Можно | GET /api/warehouses/{warehouse}/nomenclatures/{nomenclature}/history | история остатка своего проекта |
| Можно | GET /api/shops/{shop}/history | история магазина своего проекта |
| Можно | GET /api/nomenclatures/{nomenclature}/history | история номенклатуры своего проекта |
| Можно | GET /api/inventories/{inventory}/history | история остатка своего проекта |
| Осторожно | GET /api/departments/history | история отделов |
| Осторожно | GET /api/roles/history | история ролей |
| Осторожно | GET /api/permissions/history | история прав |
История полезна агенту для объяснения “что изменилось”. Но если история содержит чужой проект, это баг МСП-стены.
Скидки, промо и билеты
| Уровень | Ручка | Зачем |
|---|---|---|
| Осторожно | resource /api/discounts без create/edit-страниц | скидки и промокоды |
| Осторожно | GET /api/discounts/stats | статистика скидок |
| Осторожно | POST /api/discounts/{discount}/pause | поставить скидку на паузу |
| Осторожно | POST /api/discounts/{discount}/activate | включить скидку |
| Осторожно | POST /api/discounts/{discount}/archive | архивировать скидку |
| Осторожно | GET /api/tables/discounts/{discount}/usages | применения скидки |
| Осторожно | GET /api/admin/tickets/lookup | найти билет по токену |
| Осторожно | GET /api/admin/tickets/by-order/{order_id} | найти билет по заказу |
| Осторожно | POST /api/admin/tickets/redeem | погасить билет |
| Осторожно | POST /api/admin/tickets/unredeem | откатить гашение |
Эти ручки влияют на деньги, доступы или посещение события. Агенту лучше давать их только с подтверждением человека.
Служебные и неагентские зоны
| Уровень | Ручка | Почему |
|---|---|---|
| Не агентская | GET /api/info | health/version без пользовательского контекста |
| Не агентская | POST /api/{token}/webhook | Telegram webhook, не Bearer-токен агента |
| Не агентская | POST /api/calls | webhook телефонии, защищается отдельным секретом |
| Обычно нельзя | GET /api/debug/yookassa-trace/{paymentId} | временная диагностика платежей |
| Обычно нельзя | resource /api/settings | системные настройки |
| Обычно нельзя | resource /api/promotions | промо-логика без отдельного сценария |
| Обычно нельзя | resource /api/events | legacy-события/заказы, пока фронт не переведён |
Минимальный набор ручек для первого агента
Для безопасного первого запуска лучше начать так:
| Задача | Ручки | Права |
|---|---|---|
| Войти | POST /api/send_password, POST /api/login, GET /api/user | не требуется для входа |
| Читать заказы | GET /api/orders, GET /api/orders/{order}, GET /api/tables/orders | view-orders |
| Читать клиентов | GET /api/counterparties, GET /api/counterparties/{counterparty}, GET /api/tables/counterparties | view-counterparties |
| Читать звонки | GET /api/calls, GET /api/calls/{call}, GET /api/tables/calls | view-communications |
| Читать задачи | GET /api/tasks, GET /api/tasks/{task}, GET /api/tables/tasks | view-tasks |
| Писать рабочие изменения | PATCH/POST только в нужной группе | соответствующий edit-* |
Всё остальное лучше подключать по одному сценарию и после теста на двух проектах: агент проекта A не должен видеть проект B.
Короткое правило для разработчика
Перед любым новым API для МСП нужно ответить на один вопрос:
Где в этом запросе доказано, что данные принадлежат проекту текущего пользователя?
Если ответа нет, API небезопасен.
Короткое правило для агента
Мой токен — это мой проект. Всё, что не принадлежит моему проекту, для меня закрыто.