Администратор системы может дать возможность пользователю замещать другого пользователя. При этом у замещающего пользователя сессия не меняется, а подменяется набор ролей, ограничений и атрибутов. Все эти параметры текущий пользователь получает от замещаемого пользователя.
В прикладном коде для получения текущего пользователя рекомендуется использовать метод UserSession.getCurrentOrSubstitutedUser()
возвращающий либо замещаемого пользователя, либо пользователя, выполнившего логин (если замещения в данный момент нет).
В то же время механизмы аудита платформы (атрибуты createdBy
и updatedBy
, журнал изменений и снимки сущностей) всегда регистрируют пользователя, который произвел логин, а не замещаемого пользователя.
Если пользователь имеет замещаемых пользователей, то в правом верхнем углу главного окна приложения вместо простой надписи с именем текущего пользователя отображается выпадающий список:
При выборе другого пользователя в этом списке все открытые экраны будут закрыты, и произойдет замещение. После этого метод
UserSession.getUser()
по прежнему будет возвращать пользователя, выполнившего логин в систему, а метод UserSession.getSubstitutedUser()
- замещенного пользователя. Если замещения нет, метод UserSession.getSubstitutedUser()
возвращает null
.
Управление замещаемыми пользователями производится с помощью таблицы Substituted Users экрана редактирования пользователя. Рассмотрим экран добавления замещаемого пользователя:
-
User - текущий редактируемый пользователь. Он будет замещать другого пользователя.
-
Substituted user - замещаемый пользователь.
-
Start date, End date - необязательный период замещения. Вне периода замещение будет недоступным. Если период не указан, замещение доступно, пока не удалена данная запись таблицы.