Есть ли способ создать более выразительные выражения в блоках @Preauthorize? Вот пример того, что я повторяю, потому что @Preauthorize не очень умный из коробки.
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
public void deleteGame(@PathVariable int id, @ModelAttribute User authenticatingUser) {
Game currentGame = gameService.findById(id);
if(authenticatingUser.isAdmin() || currentGame.getOwner().equals(authenticatingUser)) {
gameService.delete(gameService.findById(id));
} else {
throw new SecurityException("Only an admin, or an owner can delete a game.");
}
}
Я бы предпочел что-то вроде.
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
@Preauthorize(isAdmin(authenicatingUser) OR isOwner(authenicatingUser, id)
public void deleteGame(@PathVariable int id, @ModelAttribute User authenticatingUser, @ModelAttribute currentGame ) { //I'm not sure how to add this either :(
gameService.delete(gameService.findById(id));
}
Отчасти проблема заключается в том, что мне нужно сделать запрос к базе данных для получения некоторых из этих материалов для проверки разрешений, таких как запрос базы данных на получение копии игры, а затем сравнение владельца игры с лицо, делающее запрос. Я не совсем уверен, как все это работает в контексте обработчика аннотации @Preauthorize или как я добавляю вещи в коллекцию объектов, доступных в атрибуте значения @Preauthorize ("").