1️⃣ 상태 코드의 이해
🔹 401번 응답코드 → 인증 실패
🔹 403번 응답코드 → 권한 없음

HTTP응답 코드에 대해서 더 알아보실려면 여기를 클릭👇
2️⃣ 현재 상태
🔹 현재 로그인이 되어있지 않은데 수정, 삭제 버튼이 보이는 상황
🔹 에러코드 401을 안내해주면 될 것 같다. → 인증 안됨

🔹 현재 로그인을 했는데, 다른 사람의 게시글에 수정, 삭제가 보이는 상황
🔹 에러코드 403을 안내해주면 된다. → 권한 없음

3️⃣ BoardController 권한 체크 (인증 포함)
🔹 게시물 주인 ID와 로그인 사용자 ID를 비교하여서 게시물의 수정 삭제 권한을 허가해줄 로직이 필요하다.


🔹 로그인 인증은 아주 자주 사용하니 생각안해도 할 수 있을 정도로 많이 반복해보자.
🔹 로직 처리 이후에 mustache 템플릿에 뿌려주는 문법도 잘 익혀야된다. 
@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";
    }Mustache 템플릿에 변수 매핑하는 법
🔹 매개변수로 
HttpServletRequest request객체를 넣는다.
🔹 해당 메소드 스코프에서 request.setAttribute (”매핑키값”, 처리된 로직 변수) 로 설정한다.
🔹 mustache템플릿 문법에 따라서 매핑키값을 호출해주면 로직처리를 자바에서 한 뒤에 다시 반환 해준다.3️⃣ View 에 Mustache 반복문 적용
🔹 로긴사용자와 게시물 사용자가 일치 할 때만 수정, 삭제 버튼이 보이게 하면 된다.
🔹 Mustache의 조건문을 적용해주면 가능하다.
🔹 아까 권한을 검증로직을 처리했던 변수는 
pageOwner이다.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}}테스트 확인1
🔹 ssar로 로긴한 상태에서 cos의 게시물에 수정, 삭제를 할 수 없다.

테스트 확인2
🔹 ssar로 로그인한 상태에서 자신의 게시물을 수정/삭제 할 수 있다. 





