springboot - blog project (57)

Yuri Lee·2020년 9월 2일
0

springboot - blog project

목록 보기
32/49

스프링부트 강좌 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에서 확인해보았다.

잘 삭제되었음을 볼 수 있다.

-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글