isuru89 :
나는 사용자 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
는 필요한 경우에는 주석.
존 카메 린 :
봄의 문서는 여기에 도움이 될 것이다. https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html
당신은 교장이나 표현의 인증 객체뿐만 아니라 메소드 인수에 액세스 할 수 있습니다. 당신은 다음과 같은 것 중 하나가 여기에 몇 가지 옵션을 가지고 그래서 :
@PreAuthorize("hasRole('ROLE_ADMIN) or #authUser.id == #userId")