# Паттерны управления пользователями и группами

Справочник типовых паттернов настройки оргструктуры, групп и кадровых изменений в 1Форме: иерархия орг.единиц, связанные и обычные группы, роли в задачах, ограничения при удалении и уникальности имён. Для администраторов при проектировании и сопровождении конфигурации пользователей и групп.

## Организационная структура

### Иерархия типов, порядок создания и множественные орг.единицы

Тип орг.единицы задаёт её уровень в иерархии. Стандартная конфигурация:

| Тип | Уровень |
|-----|---------|
| Компания | 0 |
| Департамент | 1 |
| Отдел | 2 |
| Должность | 3 |

**Должность** — конечный уровень иерархии в каждой ветке.

Рекомендуемый порядок создания оргструктуры с нуля:

1. Типы орг.структуры (Администрирование → Пользователи и группы → Типы орг.структуры)
2. Дерево орг.единиц (сверху вниз: компания → департамент → отдел → должность)
3. Пометить руководящие должности (галочка «Руководитель» в настройках орг.единицы)
4. Создать пользователей (Фамилия, логин, псевдоним, Email — обязательные)
5. Привязать пользователей к должностям

Пользователю можно назначить несколько орг.единиц, но **только одна — основная** (галочка «Основная» в профиле, подсвечивается жирным).

## Группы

### Типы групп, системные группы и связанные группы

На практике используются три основных типа групп:

| Тип | Описание | Управление составом |
|-----|----------|-------------------|
| **Связанная (организационная)** | Привязана к орг.единице | Автоматически: участники = сотрудники орг.единицы. Ручное добавление невозможно |
| **Обычная** | Произвольный набор пользователей | Ручное добавление/удаление |
| **Индивидуальная** | Один пользователь | Для выдачи прав конкретному человеку |

Несколько групп создаются и поддерживаются системой автоматически:

- **Все пользователи** — все пользователи системы (автоматически)
- **Administrators** — доступ к разделу администрирования

> **Внимание:** системные учётки `support`, `systemrobot`, `anonymous` — не менять настройки, может привести к некорректной работе. Восстановление = сброс всех настроек.

Администрирование → Пользователи и группы → Орг. структура → выбрать орг.единицу → «Связанная группа» = (Создать новую) → «Связать с группой».

![Блок «Связь с орг. единицей» в свойствах группы](https://help.1forma.ru/help-images/users-and-groups/admin_linked_group.png)

**Варианты:**

- Одна группа для одной орг.единицы
- Одна группа для всей ветки (рекурсивно включает дочерние)

Состав связанной группы обновляется **автоматически** при добавлении/удалении пользователей из связанной орг.единицы. Ручное редактирование состава — через орг.единицу, не через группу.

> Права доступа к категориям выдаются **только группам** — не отдельным пользователям и не орг.единицам.

## Роли в задачах и кадровые изменения

### Роли пользователей, перемещение орг.единиц и изменение команды

В каждой задаче пользователь может выступать в одной или нескольких ролях:

| Роль | Описание | Кратность |
|------|----------|-----------|
| **Заказчик** | Создал задачу | Один на задачу |
| **Исполнитель** | Назначен на исполнение | Несколько, но ответственный — один |
| **Подписчик** | Наблюдает, может комментировать, не исполняет | Без ограничений |
| **Акцептант** | Запрошена подпись | Без ограничений |

При реорганизации (слияние отделов, переподчинение):

- Перемещение орг.единицы = перемещение всех вложенных + связанных групп
- Права, завязанные на связанную группу, сохраняются
- После перемещения — проверить, что логика Smart-правил не сломалась (если привязаны к конкретным орг.единицам по ID)

Кадровые изменения отражаются на группах и правах автоматически:

- Добавление нового сотрудника: создать пользователя → привязать к должности → автоматически попадёт в связанные группы → автоматически получит права
- Увольнение: деактивировать пользователя (не удалять — история задач сохраняется)
- Перевод между отделами: сменить орг.единицу → автоматически сменятся группы → автоматически сменятся права

## Ограничения оргструктуры

### Уникальность имён и обязательные поля пользователя

По умолчанию название орг.единицы должно быть уникально в рамках одного родителя (Name + ParentId). При попытке создать дубликат система выбрасывает ошибку `OrgStructureUnits_NotUnique`.

Однако это поведение управляется пользовательской настройкой `OrgStructure_AllowNonUniqueOrgUnitNames` (по умолчанию `false`). Если включить — дубликаты разрешены.

На уровне БД ограничения уникальности на пару «название + родитель» нет — проверка выполняется только в приложении.

Безусловно обязательные поля: **орг.единица**, **логин**, **пароль**.

Дополнительные обязательные поля определяются в Общих настройках приложения (блок «Обязательные поля профиля пользователя»): фамилия, дата рождения, псевдоним на русском, e-mail. Набор зависит от конфигурации конкретной инсталляции.

### Удаление орг.единиц

Удаление орг.единицы с активными (не уволенными) пользователями **невозможно**. Система выбрасывает `TCLogicException`: «Невозможно удалить организационную единицу, поскольку в ней есть сотрудники».

Порядок действий при удалении:

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

При удалении родительской орг.единицы удаляются все дочерние элементы. Если нужно сохранить вложенные единицы — сначала перенесите их (измените поле «Входит в»), потом удаляйте родителя.
