Механизм логина от имени пользователя
Общие принципы
Функционал, позволяющий пользователям системы авторизоваться от имени другого выбранного пользователя. Это может понадобиться в ряде случаев. Например:
-
При передаче в управление учётной записи
-
Необходимости службе поддержки взять управление для удалённой помощи пользователю
-
Необходимости входа администратора
При работе под учётной записью пользователя логируется (пишется в журнал безопасности) кто совершает действия.
Методы работы механизма логина от имени пользователя
@Override
public UserInfoDTO getUserInfo(@RequestHeader("Authorization") String sessionId, HttpServletResponse response) {
final UserInfo userInfo = mellophone.user(new SystemCallContext(), sessionId);
return userService.getUserInfo(userInfo);
}
@Override
public String setOnBehalfInfo(@RequestBody UserDTO request, @RequestHeader("Authorization") String sessionId,
HttpServletResponse response) {
mellophone.setOnBehalfInfo(sessionId, request);
return "OK";
}
@Override
public String backToAdminSession(@RequestBody UserInfoDTO request, @RequestHeader("Authorization") String sessionId,
HttpServletResponse response) {
mellophone.backToAdminSession(sessionId, request);
return "OK";
}
Реализация механизма установки прав пользователя в зависимости от способа логина
UserInfo userInfo = this.restTemplate.getForObject(url, UserInfo.class);
String userInfoSid = userInfo.getSid();
if (onBehalfUser != null) {
userInfo.setSid(onBehalfUser.getSid());
userInfo.setLogin(onBehalfUser.getLogin());
userInfo.setOriginatorSid(userInfoSid);
userInfo.setName(onBehalfUser.getFullName());
if (onBehalfUser.isAdmin()) {
userInfo.setAdmin(onBehalfUser.isAdmin());
}
if (onBehalfUser.isTestAdmin()) {
userInfo.setTestAdmin(onBehalfUser.isTestAdmin());
}
userInfo.setOnBehalf(true);
}
else {
userCursor.tryGet(userInfoSid);
userInfo.setOriginatorSid(userInfoSid);
userInfo.setName(userCursor.getFullName());
if (userCursor.getIsAdmin()) {
userInfo.setAdmin(userCursor.getIsAdmin());
}
if (userCursor.getIsTestAdmin()) {
userInfo.setTestAdmin(userCursor.getIsTestAdmin());
}
userInfo.setOnBehalf(false);
}
return userInfo;