Безопасность доступа к объектам БД

Безопасность доступа к объектам БД обеспечивается с помощью безопасных курсоров, наследующих курсоры Celesta.

Получение данных о пользователя

@Override
public UserDTO saveUserData(@RequestBody UserDTO request,
                            @RequestHeader("Authorization") String sessionId,
                            HttpServletResponse response) {
    UserInfo userInfo = mellophone.user(new SystemCallContext(), sessionId);
    return userService.saveUserData(new SystemCallContext(), userInfo, null, request);
}
Пример функции, возвращающей данные о пользователе в случае использование Mellophone
@Override
@CelestaTransaction
public UserInfo user(CallContext context, String sessionId) throws AuthException {
    String url = UriComponentsBuilder.fromUriString(properties.getMellophoneUrl())
            .path(ISAUTHENTICATED_PATH)
            .queryParam(SESID_PARAM, sessionId)
            .build()
            .toUriString();

    try {
        UserCursor userCursor = new UserCursor(context);

        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;
    } catch (HttpStatusCodeException ex) {
        throw new AuthException(ex);
    }
}

Работа с безопасным курсором

Пример безопасного курсора
@Log4j2
public class SecureUsersCursor extends UserCursor {
    private final UserInfo userInfo;

    public SecureUsersCursor(CallContext context, UserInfo userInfo) {
        super(context);
        this.userInfo = userInfo;
    }

    @Override
    public boolean tryGet(String objectSid) {
        if (isAuthorized(objectSid)) {
            return super.tryGet(objectSid);
        } else {
            throw new St2ApiException("User is not authorized for making requested changes");
        }
    }

    private boolean isAuthorized(String objectSid) {
        return this.userInfo.getSid().equals(objectSid);
    }
}
Пример вызова безопасного курсора
SecureUsersCursor userCursor = new SecureUsersCursor(context, userInfo);