Перейти к содержанию

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

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

Иерархия типов

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

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

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

Создание оргструктуры — порядок

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

Множественные орг.единицы

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

Группы

Типы групп

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

Системные группы

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

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

Создание связанной группы

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

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

Актуализация связанной группы

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

Из тестов: права доступа к категориям выдаются только группам (не пользователям, не орг.единицам).

Роли пользователей в задачах

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

Изменение оргструктуры

Перемещение орг.единиц

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

Изменение команды

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

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

Уникальность имён

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

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

На уровне БД UNIQUE-ограничения на Name+ParentId нет -- проверка только в application layer (OrgStructure.cs:468, OrgStructure.cs:562).

Тест Q17: «Можно ли создать две должности "Офис-менеджер" в отделе продаж?» Правильный ответ B: «Название орг.единицы в рамках одного уровня должно быть уникально» -- верно для дефолтной конфигурации.

Источники: core/TCClassLib/OrgStructure.cs:257 (настройка), :468 и :562 (проверки при создании и обновлении), DDL dbo.OrgStructureUnit (нет DB-constraint на имя).

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

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

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

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

Тест Q19: «Что произойдёт с пользователями при удалении орг.единицы?» Правильный ответ C: «Удаление орг.единицы с пользователями невозможно».

Источники: core/TCClassLib/OrgStructure.cs:667-696 (метод RemoveOrgStructureUnit), docs/academy/admin-basic/01-basic-settings.md (Кейс 4).

Обязательные поля при создании пользователя

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

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

Тест Q33 (финальный): «Какие параметры обязательны для создания пользователя?» Правильные ответы: A (орг.единица), C (логин), E (пароль), H (определяется в общих настройках).

Источники: docs/academy/tests/basic-admin-final.md:366-378, docs/domains/users-and-groups/business.md:82 («обязательные поля: логин, фамилия, псевдоним, орг.единица, e-mail -- набор зависит от общих настроек»), docs/academy/admin-basic/09-system-support.md:81.

Ссылки на документацию