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

Перевоплощение

1. Что это

Перевоплощение — механизм, позволяющий администратору (или пользователю с соответствующими правами) работать в системе от имени другого пользователя. Перевоплотившийся видит то же, что видит целевой пользователь. Используется для отладки прав, настройки интерфейса и поддержки.

Не путать с замещением: замещение передаёт права, а перевоплощение создаёт новую сессию от имени целевого пользователя.

2. Кто может перевоплощаться

Право перевоплощаться можно получить тремя способами:

# Способ Условие
1 Системная группа «Администраторы» Пользователь в группе Administrators, и группе не выдано спецправо DENYIMPERSONATION
2 Право группы на группу Право «Перевоплощаться в членов группы». Не-админ не может перевоплощаться в администратора
3 EWS (Exchange) Для синхронизации календаря. Настройка CalendarExchangeUseImpersonate или общая настройка «Использовать перевоплощение»

Порядок проверки прав

Возможность перевоплощения система проверяет по шагам:

  1. Если у пользователя есть спецправо DENYIMPERSONATION — перевоплощение запрещено.
  2. Если пользователь — администратор — перевоплощение разрешено (в любого пользователя).
  3. Если целевой пользователь — администратор, а инициатор — нет — запрещено.
  4. Иначе проверяется право группы на группу «Перевоплощаться в членов группы».

3. Спецправо DENYIMPERSONATION

Специальное право, назначаемое группе. Если пользователь входит хотя бы в одну группу с этим правом — перевоплощение для него запрещено (даже если он администратор).

Ограничение: нельзя назначить DENYIMPERSONATION группе «Администраторы».

Право хранится в таблице GroupPermissionsToSpecialActions.

4. API

Перевоплощением можно управлять через REST API.

4.1 Начать перевоплощение

Запрос:

POST /api/auth/{userId}/impersonate

Ответы:

  • 204 No Content — успешно, последующие запросы идут от имени целевого пользователя;
  • 403 Forbidden — нет прав или попытка вложенного перевоплощения.

Ограничение: вложенное перевоплощение запрещено — при попытке перевоплотиться, уже будучи перевоплощённым, возвращается 403.

4.2 Завершить перевоплощение

Запрос:

POST /api/auth/undotransformation

Ответ: 204 No Content — сессия возвращается к реальному пользователю.

5. Механика сессии (JWT)

Что происходит на уровне сессии при перевоплощении (полезно для диагностики):

  1. Система создаёт новый JWT-токен.
  2. В новом токене SessionUserId — целевой пользователь, OldUserId — инициатор.
  3. Поле ImpersonatedUserId доступно всем сервисам для проверки, кто инициатор.
  4. Все действия выполняются от имени целевого пользователя.
  5. При завершении перевоплощения токен возвращается к исходному пользователю.
  6. Проверяется наличие действующей лицензии у целевого пользователя. Если лицензии нет — перевоплощение не выполняется.
  7. Токен перевыпускается только после успешной проверки лицензии.

6. Аудит (TransformationLog)

Каждое перевоплощение логируется в таблицу TransformationLog.

Колонка Тип Описание
TransformationLogID int, PK, Identity ID записи
OldUserID int, FK → Users Инициатор перевоплощения
NewUserID int, FK → Users Целевой пользователь
TransformationTime datetime Время события
UserComputerName varchar(300) Имя компьютера / IP инициатора
IsReturn bit 0 = перевоплощение, 1 = возврат
UserAgent varchar(512), NULL User-Agent браузера

Запись создаётся при: перевоплощении (IsReturn = 0) и возврате (IsReturn = 1).

Просмотр: вкладка «Журнал» в профиле пользователя. Видят: администраторы (журналы всех пользователей), пользователь (свой журнал).

7. Защита данных при перевоплощении

7.1 Конфиденциальность

С версии 2.268.326 перевоплощение блокируется конфиденциальностью. При перевоплощении проверяются права обоих пользователей — инициатора и целевого. Если целевой пользователь — подписчик конфиденциальной задачи, а перевоплощающийся администратор — нет, содержимое скрывается, а задача исключается из основных списков.

Что скрывается:

  • Текст задачи → (Текст задачи скрыт)
  • Текст комментариев → (Комментарий скрыт)
  • Файлы — недоступны (проверка доступа учитывает обоих пользователей)
  • Попытка добавить или переслать комментарий к конфиденциальной задаче — отклоняется

Что фильтруется (задача исчезает из списков):

  • Ленты задач, комментариев и обсуждений
  • История просмотров
  • Глобальный поиск

Что остаётся видимым (известные ограничения текущей версии):

  • Избранное — задача остаётся в списке, заголовок заменяется на (Текст задачи скрыт)
  • Счётчики непрочитанных и сигнальные события — продолжают учитывать конфиденциальные чаты
  • Push-уведомления, всплывающие уведомления и события о новом сообщении — не блокируются
  • Журнал попыток доступа из-под перевоплощения — пока не ведётся

7.2 Шифрование

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

Что скрыто при отсутствии права хотя бы у одного из двух:

  • Зашифрованные ДП — пустые или скрытые
  • Текст задачи — не отображается
  • Файлы — недоступны для скачивания
  • Комментарии — текст скрыт

7.3 Матрица

Сводно по двум механизмам разграничения доступа:

Защитный механизм Замещение Перевоплощение
Конфиденциальность Заблокировано Заблокировано (с 2.268.326)
Шифрование Заблокировано Заблокировано (оба должны иметь право)
Конфиденциальность + шифрование Заблокировано Заблокировано

8. Интерфейс

В веб-версии

В веб-интерфейсе перевоплощение управляется так:

  • Кнопка перевоплощения — в профиле пользователя (панель инструментов) и в справочнике «Сотрудники» (при наведении).
  • Индикатор перевоплощения — зелёная полоса в верхней панели с именем целевого пользователя.
  • Выход — крестик на индикаторе.

Пункт «Перевоплощение» в меню профиля пользователя

Зелёный индикатор перевоплощения с именем пользователя и крестиком выхода

В мобильном приложении

Перевоплощение доступно.

9. Ограничения

Перевоплощение работает с рядом ограничений:

Ограничение Описание
Вложенное перевоплощение Запрещено. Нельзя перевоплощаться, будучи перевоплощённым
Лицензия У целевого пользователя должна быть действующая лицензия (не-конкурентная). Проверка выполняется при начале перевоплощения; если лицензии нет — перевоплощение блокируется
Не-админ → админ Пользователь без прав администратора не может перевоплотиться в администратора
DENYIMPERSONATION Блокирует перевоплощение даже для администратора
Нельзя применить DENYIMPERSONATION к группе «Администраторы» Защита от самоблокировки

10. Связанные материалы