스프링부트 강좌 57강(블로그 프로젝트) - 글 삭제하기
board 를 셀렉트 하게 되면 유저 정보나 게시글에 대한 댓글 정보를 EAGER 전략을 통해 같이 들고 온다.
<div>
글 번호 : <span id="id"><i>${board.id}</i></span>
작성자 : <span><i>${board.user.username}</i></span>
</div>
다음과 같이 적으면 정보를 들고 올 것이다.
@Transactional(readOnly = true) 를 붙여준 이유는? select 만 하는 것이기 때문에
deleteById: function(){
var id = $("#id").text();
$.ajax({
type: "POST",
url: "/api/board"+id,
dataType: "json" // 요청을 서버로해서 응답이 왔을 때 기본적으로 모든 것이 문자열 (생긴게 json이라면) => javascript오브젝트로 변경
}).done(function(resp){
alert("Deleted successfully");
location.href = "/";
}).fail(function(error){
alert(JSON.stringify(error));
});
}
val()이 아니라 text() 값을 넣어주자. 그래야 content 내용을 제대로 들고 올 수 있다.
내가 쓴 글만 삭제할 수 있도록 해야 한다. 내가 user라는 이름의 사용자라면 love라는 사용자가 쓴 게시물을 삭제할 수 없어야 한다. 따라서 다음과 같은 코드를 추가해준다.
<c:if test="${board.user.id == principal.user.id}">
여기서 보이는 principal이라는 것은?
config/auth/PrincipalDetail.java
@Getter
public class PrincipalDetail implements UserDetails{
private User user; //콤퍼지션: 객체를 품고 있는 것
얘의 user의
model/User.java
public class User {
@Id //Primary key
id 값을 말한다!
ssar이라는 사용자는 user 사용자가 적은 게시글을 삭제할 수 없다.
실제 게시글 id 중 3번과, 9번을 삭제하고 실제 db에서 확인해보았다.
잘 삭제되었음을 볼 수 있다.
-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-