봄 부팅 @PreAuthorize는 인증 된 사용자 ID가 경로 매개 변수 ID와 동일한 경우에만 관리자 또는 경우 작업을 허용

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")

추천

출처http://43.154.161.224:23101/article/api/json?id=203142&siteId=1