У меня есть контроллер с пользовательскими операциями CRUD.
@Controller
public class UserController {
// @TODO need to check whether userId == authUser.id or authUser is admin??
//
@PreAuthorize("hasRole('ROLE_ADMIN) or ...???...")
@PostMapping("/user/{id}/edit")
public boolean editUser(@PathVariable("id") long userId,
@RequestBody User newUserObj,
@CurrentUser authUser) {
// I don't like to always call a helper function from here
// check(authUser.getId() == userId);
return userService.edit(userId, newUserObj);
}
// ... rest of the methods
}
Эта операция разрешена только для администратора или самого пользователя. Ни один пользователь не может редактировать профили других пользователей.
Я пробовал @PreAuthorize("hasRole('ROLE_ADMIN'))
, он работает только для пользователя с правами администратора, но я хочу проверить, является ли аутентифицированный пользователь тем же пользователем, который указан параметром userId
(authUser.getId() == userId
). Как я могу определить это выражение внутри аннотации? Это возможно без написания вспомогательной функции.
У меня также есть текущий аутентифицированный пользователь, введенный в метод контроллера с использованием аннотации @CurrentUser
, в случае необходимости.