# Разрешения (/ru/docs/b24/permissions)

Прочитайте эту страницу, прежде чем давать ИИ-агенту, скрипту или коллеге менять вашу CRM через `b24`. Здесь
показано, как решить для каждого профиля, что можно только читать, что сначала спрашивает вас и что выполняется
сразу. После нее вы сможете запретить агентам двигать сделки и удалять и будете знать, какие проверки действуют
независимо от разрешений.

Слова, которые использует эта страница:

- **Профиль**: имя, которое вы дали входу на один портал, например `work`. Это первое слово команды.
- **Ключ прав**: имя команды, например `deals.move`, или группы команд, например `deals`. Более длинный ключ
  точнее и побеждает.
- **Уровень**: что происходит при запуске команды: `deny`, `readonly`, `ask` или `allow`.

## Уровни [#уровни]

| Уровень | Что происходит |
|---|---|
| `deny` | Команда отклоняется, чтение тоже. |
| `readonly` | Чтение работает, запись отклоняется. |
| `ask` | Запись сначала спрашивает в терминале. Без терминала она отклоняется, если не передан `--yes`. **Через MCP она выполняется.** |
| `allow` | Команда выполняется без вопроса. |

```sh
b24 work config set permissions.deals.move readonly   # no deal moves through b24 on this profile
b24 work config set permissions.deals readonly        # every deal command reads, none writes
b24 work config show                                  # each key with its level and where it came from
```

Отказ приходит как `permission_error` (код выхода 5) и называет ключ. Он не значит, что вход сломан.

Агент не может ослабить разрешение. `config set` или `config unset`, которые сняли бы ограничение, отклоняются, если
вы не запускаете их сами в терминале.

## Что задано до ваших изменений [#что-задано-до-ваших-изменений]

| Ключ | Встроенный уровень | Почему |
|---|---|---|
| `deals.delete`, `leads.delete` | `ask` | Удаление нельзя отменить. |
| `crm.assign-others` | `deny` | Битрикс24 сообщает сотруднику, что ему передали запись. |
| `api.<method>` из семейства, которое пишет людям, публикует или запускает автоматизацию | `deny` | См. ниже. Чтение тоже. |
| `api.<method>`, который `b24` сам не читает и не пишет | `ask` | В нем может быть то, что вы скрываете от агентов. |
| Любая другая команда | `allow` | |

Через `api call` запрещены семейства `im`, `imopenlines`, `imbot`, `imconnector`, `log.blogpost`, SMS
(`messageservice`), почта (`mailservice`), телефония (`telephony`, `voximplant`), бизнес-процессы (`bizproc`,
`crm.automation`), дела CRM (`crm.activity`), задачи (`tasks`, `task`), `user.add`, публичные ссылки на файлы,
`event.bind` и `batch`. `b24 work api show <method>` называет ключ метода, его уровень и ключи, которые он проверяет
заодно.

## Одна команда может проверять несколько ключей [#одна-команда-может-проверять-несколько-ключей]

Команда проверяет свой ключ и ключи того, что она делает по пути. `--dry-run` называет каждый с его уровнем и ничего
не отправляет:

```sh
b24 work deals update deal:12 --stage "Contract signed" --owner 34 --dry-run
```

- Запись, которая задает стадию (`--stage`, `move`), проверяет `deals.move` или `leads.move`. Стадия успеха или
  провала и `close` проверяют еще и `deals.close` или `leads.close`.
- Ответственный, который не совпадает с пользователем вебхука (`--owner`), проверяет `crm.assign-others`.
- `api call` проверяет `api.<method>` и ключ команды, которая делает то же самое. `api call crm.deal.update`
  проверяет `deals.update`, а со `stageId` еще и `deals.move`. Поэтому `api.crm.deal.update: deny` останавливает и
  `deals update`, `move` и `close`.
- `search all` пропускает вид, чей ключ списка запрещен, и называет его в `missing`.

## Смена стадии запускает роботов портала [#смена-стадии-запускает-роботов-портала]

На стадии в Битрикс24 могут быть роботы и бизнес-процессы. Они отправляют клиенту письмо, SMS или счет или ставят
задачу коллеге. `b24` их не видит. Если на вашем портале есть такие роботы, решите, кто может двигать сделку:

```sh
b24 work config set permissions.deals.move ask        # at a terminal, every move asks you first
b24 work config set permissions.leads.move ask
```

`ask` защищает только в терминале. Прежде чем агент получит профиль через MCP, поставьте перемещениям `readonly`
или включите подтверждение в клиенте агента, см. [Агенты и MCP](#agents-and-mcp).

## Агенты и MCP [#агенты-и-mcp]

Через MCP в терминале никого нет, чтобы ответить, а сервер не показывает форму, поэтому запись на уровне `ask`
выполняется. Это касается и встроенных уровней: агент с вебхуком администратора может удалять сделки и лиды.
Выберите одно из двух:

- Поставьте `readonly` или `deny` каждой записи, которую агент делать не должен:

  ```sh
  b24 work config set permissions.deals.move readonly
  b24 work config set permissions.leads.move readonly
  b24 work config set permissions.deals.delete deny
  b24 work config set permissions.leads.delete deny
  ```

- Или оставьте уровни и включите подтверждение для инструмента `b24_write` в клиенте агента, чтобы клиент спрашивал
  вас перед каждой записью.

`mcp serve --permission deals.delete=deny` и `mcp add … --permission …` делают уровень строже для одного этого
сервера. Профиль они никогда не ослабляют. См. [MCP](/llms.mdx/docs/ru/b24/mcp/content.md).

## Проверки, которые действуют независимо от разрешений [#проверки-которые-действуют-независимо-от-разрешений]

- **`B24_READ_ONLY=1`** отклоняет любую запись в этой оболочке или в этом таймере. Агент, которого запускает
  `schedule agent`, работает с ним.
- **Вебхук сотрудника не может удалять или очищать.** Если пользователь вебхука не администратор Битрикс24, `b24`
  отклоняет любое удаление, изменение, которое очищает поле, отвязку, объединение дублей и `api call batch`
  (причина `employee.*`).
- **Чтение контактов и компаний через `api call`** доступно только администратору.
- **Телефоны и почта** клиентов, которые не принадлежат пользователю вебхука: не больше 100 таких контактов и
  компаний в день через `people show` и `organizations show`, на пользователя и его агентов вместе. Счетчик хранится
  на этом компьютере, поэтому он остановит случайность или агента, но не того, кто хочет забрать базу.
- **Чьи сделки копирует синхронизация** (`crm.bitrix24:<portal>.unassigned`, `scope`, `self`). Их задаете только вы,
  агенту отказывают.
- **Права доступа самого Битрикс24.** Вебхук действует как сотрудник, который его создал, и портал отклоняет то, что
  этому сотруднику нельзя (`bitrix.access-denied`).

Если вы вошли через локальное приложение, а не через вебхук, `b24` действует как сотрудник, который вошел, и каждое
правило выше про пользователя вебхука относится к этому сотруднику.

Подробнее: [настройки](/llms.mdx/docs/ru/b24/configuration/content.md), [безопасность](/llms.mdx/docs/ru/b24/security/content.md).
