Search

[스프링 게시판] 수정, 삭제 권한 설정

@3/20/2023
어드민 - 모든 글 삭제 권한
어드민 포함 모든 유저 - 자신이 쓴 글 수정 권한

게시글 예시

Service의 모든 로직에 로그인 유저 정보를 받아서 요청받은 게시글 작성자 정보와 비교 후 삭제
컨트롤러
@PostMapping("/{postId}/edit") public String updatePost( @PathVariable Long postId, @ModelAttribute PostUpdateDTO postUpdateDTO, @SessionAttribute User loginUser ) { postService.updatePost(postId, postUpdateDTO, loginUser); return "redirect:/posts/" + postId; } @GetMapping("/{postId}/delete") public String deletePost( @PathVariable Long postId, @SessionAttribute User loginUser ) { postService.deletePost(postId, loginUser); return "redirect:/posts/"; }
JavaScript
복사
서비스
@Transactional public void updatePost(Long postId, PostUpdateDTO postUpdateDTO, User user) { Post post = findPostById(postId); if (post.getUser().getId() == user.getId()) { post.updatePost(postUpdateDTO); } else { throw new IllegalStateException("게시글을 수정할 권한이 없습니다."); } } @Transactional public void deletePost(Long postId, User user) { Post post = findPostById(postId); if (post.getUser().getId() == user.getId() || user.getRole() == Role.ADMIN) { postRepository.delete(postId); } else { throw new IllegalStateException("게시글을 삭제할 권한이 없습니다."); } } public Post findPostById(Long postId) { return postRepository.findOne(postId).orElseThrow(() -> { throw new IllegalStateException("해당 게시글이 존재하지 않습니다"); }); }
JavaScript
복사

짐같은 테스트 코드

코드를 수정할 때마다 테스트 코드도 수정해줘야 해서 불편했음
어차피 웹 상에서 테스트를 통과해야하기 때문에 테스트 코드는 불필요하게 느껴짐
차라리 웹 테스트 절차를 상세히 작성해서 그에 맞게 테스트하는 게 더 낫겠음
게시글 등록, 수정, 삭제
댓글 등록, 수정, 삭제
유저 권한 테스트
게시글은 작성자만 수정/삭제 가능
단, 어드민은 모든 글, 댓글 삭제 가능

관련 커밋

acba804672bd442aea188fda53324a0e3e9f7fb9
commit