# Структура и роли

> Дерево подразделений организации и точный список того, что может администратор, руководитель, сотрудник, подрядчик и аудитор.

К концу этой страницы вы сможете:

1. построить структуру организации из подразделений;
2. выбрать каждому человеку роль;
3. понять, какие действия сервер разрешит этой роли, а какие отклонит.

Пример: в «Северном ветре» Анна — руководитель отдела бэкенда, Борис — сотрудник этого отдела, Вера — подрядчик, Глеб из финансового контроля — аудитор, а основатель Дмитрий — администратор.

## Подразделения

Структура — это дерево. Корень создаётся вместе с организацией: это узел типа «Юрлицо» с названием организации.

| Тип в кабинете | Значение в API |
|---|---|
| Холдинг | `holding` |
| Юрлицо | `legal_entity` |
| Филиал | `branch` |
| Департамент | `department` |
| Отдел | `unit` |
| Команда | `team` |

Правила дерева, которые проверяет сервер:

- структуру меняет только администратор;
- название — от 1 до 120 символов;
- корень нельзя перенести или удалить;
- узел нельзя перенести внутрь самого себя («Нельзя перенести подразделение внутрь самого себя»);
- удалить можно только пустой узел: сначала вложенные подразделения, затем люди.

```text
Северный ветер (Юрлицо)                 ← корень, администратор Дмитрий
└── Разработка (Департамент)
    ├── Бэкенд (Отдел)                  ← руководитель Анна
    │   ├── Борис (сотрудник)
    │   └── Вера (подрядчик, 60 дней)
    └── Платформа (Команда)
Глеб (аудитор) прикреплён к корню
```

1. Переключитесь на организацию и откройте вкладку «Структура».

2. В форме «Добавить подразделение» выберите родительский узел, тип и название, нажмите «Создать».

3. Переименовать или удалить узел можно кнопками рядом с ним.

## Роли

Каждый человек в организации прикреплён к одному узлу дерева и имеет одну роль. Роль и узел задаются в приглашении, позже их меняет администратор на вкладке «Сотрудники».

| Роль | Значение в API | Кратко |
|---|---|---|
| Администратор | `org_admin` | Управляет организацией |
| Руководитель | `unit_head` | Видит своё поддерево и увольняет в нём |
| Сотрудник | `member` | Работает с памятью |
| Подрядчик | `contractor` | Только свои записи и записи проекта, доступ со сроком |
| Аудитор | `auditor` | Журнал без содержимого записей |

## Что может каждая роль

| Действие | Админ | Руководитель | Сотрудник | Подрядчик | Аудитор |
|---|---|---|---|---|---|
| Видеть структуру | да | да | да | да | да |
| Менять структуру | да | — | — | — | — |
| Список сотрудников | все | своё поддерево и себя | только себя | только себя | только себя |
| Приглашать, менять роль, узел и срок доступа | да | — | — | — | — |
| Выпустить себе ключ | да | да | да | да | — |
| Видеть ключи | все ключи организации (без секретов) | свои | свои | свои | — |
| Отзывать ключи | любой | свои | свои | свои | — |
| Увольнять с передачей знаний | любого, кроме себя | людей своего поддерева, кроме администраторов | — | — | — |
| Читать и писать записи | да | да | да | только свои и проектные | — |
| Журнал организации | да | — | — | — | да |
| Тариф и места | да | — | — | — | — |

Что читает каждая роль:

- **Администратор, руководитель, сотрудник** — свои записи, записи всей организации, проектные записи и записи «отделу» своего узла и узлов выше по дереву. Администратор и руководитель дополнительно видят записи «отделу» во всём поддереве, которым руководят. Черновики («только автор») других работающих людей не видит никто, включая администратора.
- **Подрядчик** — только свои записи и записи с видимостью «проект». Его новые записи сразу получают видимость «проект».
- **Аудитор** — ни одной записи. Ключ ему выпустить нельзя («auditor_has_no_keys»), записывать в память он не может; ему доступен журнал организации.

В организации всегда должен быть хотя бы один действующий администратор. Сервер не даст понизить роль последнего администратора или уволить его — ответ «В организации должен остаться хотя бы один администратор». Себя уволить тоже нельзя.

Для руководителя отдела выбирайте узел отдела, а не департамента: руководитель видит записи «отделу» во всём поддереве своего узла и может увольнять людей внутри него.

## Типичные ответы сервера

| Код | Когда | Что делать |
|---|---|---|
| `org_admin_required` | Действие доступно только администратору | Попросите администратора |
| `not_allowed_to_offboard` | Руководитель пытается уволить человека вне своего поддерева или администратора | Увольняет администратор |
| `last_admin` | Попытка понизить или уволить последнего администратора | Сначала назначьте второго администратора |
| `node_has_children`, `node_has_members` | Удаление непустого узла | Перенесите или удалите вложенное |
| `access_expired` | Срок доступа человека истёк | Администратор продлевает срок |

Полный список ошибок — в разделе [Ошибки](/reference/errors/).

## Что дальше
