Безопасность доступа к объектам БД
Безопасность доступа к объектам БД обеспечивается с помощью безопасных курсоров, наследующих курсоры Celesta.
Получение данных о пользователя
@Override
public UserDTO saveUserData(@RequestBody UserDTO request,
@RequestHeader("Authorization") String sessionId,
HttpServletResponse response) {
UserInfo userInfo = mellophone.user(sessionId);
return userService.saveUserData(new SystemCallContext(), userInfo, request);
}
Пример функции, возвращающей данные о пользователе в случае использование Mellophone
@Override
public UserInfo user(String sessionId) throws AuthException {
String url = UriComponentsBuilder.fromUriString(properties.getMellophoneUrl())
.path(ISAUTHENTICATED_PATH)
.queryParam(SESID_PARAM, sessionId)
.build()
.toUriString();
try {
UserInfo userInfo = this.restTemplate.getForObject(url, UserInfo.class);
userInfo.setStudent(true);
userInfo.setOriginatorSid(userInfo.getSid());
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);