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