인프런 커뮤니티 질문&답변

SP Partners님의 프로필 이미지
SP Partners

작성한 질문수

스프링 시큐리티

본인글 삭제 아래 질문 이어서..

작성

·

453

0

안녕하세요. 댓글로 다시 질문드렸는데 못보시는것 같아서 한번 더 질문드립니다.
인증을 받은 상태라서 로그인 유저 정보를 가져오는데는 어려움이 없습니다.
그럼 작성한 게시글의 작성자 id는 어떻게 가져오는가가 문제입니다.
@PreAuthorize("isAuthenticated() and (( #board.createdBy == principal.userId ) or hasRole('ROLE_ADMIN'))")
@RequestMapping( value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity<Message> updateUser(Board board, @Pathvariable String id){
    messageService.updateMessage(id);
 return new ResponseEntity<Message>( new Message("수정성공"), HttpStatus.OK );
}
구글링을 해보니 바디에 삭제 혹은 수정할 글의 정보를 담아서 위 코드와 같이 요청을 보내더라구요..
그럼 의미가 없는게 아닌가 싶습니다. 해당 글쓴이의  id(pk)를 제 id와 같게 담아서 보내면 삭제할수 있는 권한만 있으면 다른 글도 삭제 혹은 수정이 되지 않는가? 라는 생각이 들더라구요.. 제가 이상하게 생각하는건가요??ㅎㅎ;;

답변 1

0

정수원님의 프로필 이미지
정수원
지식공유자

보통 본인글을 본인만 삭제 가능하게 할려면 세션을 활용합니다

 

세션 자체가 사용자별로 구분되는 저장소이기 때문에  글을 등록하는 시점에 세션에 담긴 본인정보를 등록자로 저장합니다

그리고 요청에 대한 권한여부를 체크할 때 현재 세션에 담긴 유저정보와 게시글에 저장된 등록자 정보를 비교해서 일치하는지 여부를 판단해서 처리하게 됩니다

 

그렇다면 위의 구문에서 board.createBy 는 등록자 정보고 principal.username 는 세션에 저정된 유저정보라고 해석할 수 있습니다

 

"해당 글쓴이의  id(pk)를 제 id와 같게 담아서 보내면 삭제할수 있는 권한만 있으면 다른 글도 삭제 혹은 수정이 되지 않는가?"

 

이 부분은 당연한 질문인데 요청시 저 부분이 조작되지 않도록 구현해야 하겠죠

SP Partners님의 프로필 이미지
SP Partners

작성한 질문수

질문하기