상태 코드의 이해
현재 상태
BoardController 권한 체크 (인증 포함)
@RequiredArgsConstructor
@Controller
public class BoardController {
private final BoardRepository boardRepository;
private final HttpSession session;
@GetMapping("/board/{id}")
public String detail(@PathVariable int id, HttpServletRequest request) {
// 모델에게 위임하고 상세데이터를 가져온다.
BoardResponse.DetailDTO responseDTO = boardRepository.findById(id);
// 현재 사용자가 로그인된 사용자인지 체크 (세션과 매칭하는지 체크)
User sessionUser = (User) session.getAttribute("sessionUser");
boolean pageOwner;
if (sessionUser == null){
//sessionUser에 값을 찾을 수 없다면 로그인하지 않은 사람
pageOwner = false;
} else {
// 게시물 주인 id와 session 사용자 id를 비교해서, 게시물의 수정 권한이 있는지 체크.
int postOwnerId = responseDTO.getUserId();
int sessionUserId = sessionUser.getId();
pageOwner = postOwnerId == sessionUserId;
}
// mustache에서 아래 키워드와 매핑된 곳에 뿌려줌
request.setAttribute("pageOwner", pageOwner);
// request가방에 담아서 화면에 렌더링할 수 있게해준다.
// 아래 코드 예시로는 mustache에서 {{board}} 같이 문법을 쓰면 정보를 가져다 쓸 수 있다.
request.setAttribute("board", responseDTO);
return "board/detail";
}
Java
복사
Mustache 템플릿에 변수 매핑하는 법
매개변수로 HttpServletRequest request객체를 넣는다.
해당 메소드 스코프에서 request.setAttribute (”매핑키값”, 처리된 로직 변수) 로 설정한다.
mustache템플릿 문법에 따라서 매핑키값을 호출해주면 로직처리를 자바에서 한 뒤에 다시 반환 해준다.
View 에 Mustache 반복문 적용
Mustache 조건문
{{#변수}}내용 {{/변수}} ← 이렇게 감싸주면 된다.
{{#pageOwner}}내용{{/pageOwner}} <- 이렇게 적용할 것이다.
<!-- pageOwner가 참일경우에 아래 코드가 표시가 된다. -->
{{#pageOwner}}
<div class="d-flex justify-content-end">
<button class="btn btn-warning me-1">수정</button>
<button class="btn btn-danger">삭제</button>
</div>
{{/pageOwner}}
HTML
복사
테스트 확인1
ssar로 로긴한 상태에서 cos의 게시물에 수정, 삭제를 할 수 없다.
테스트 확인2
ssar로 로그인한 상태에서 자신의 게시물을 수정/삭제 할 수 있다.