권한 처리

@Transient
private boolean isReplyOwner;

댓글 테이블에 이거 추가

보더 서비스에 추가

public Board findByJoinUser(Integer boardId, User sessionUser) {
    Board board = boardJAPRepository.findByIdJoinUser(boardId)
            .orElseThrow(() -> new Exception404("게시글을 찾을 수 없습니다"));

    boolean isBoardOwner = false;
    if(sessionUser != null){
        if(sessionUser.getId() == board.getUser().getId()){
            isBoardOwner = true;
        }
    }

    board.setIsBoardOwner(isBoardOwner);

    board.getReplies().forEach(reply -> {
        boolean isReplyOwner = false;
        if (sessionUser != null) {
            if (reply.getUser().getId() == sessionUser.getId()) {
                isReplyOwner = true;
            }
        }
        reply.setReplyOwner(isReplyOwner);
    });

    return board;
}

머스테치 수정

{{> layout/header}}

<div class="container p-5">

    <!-- 수정삭제버튼 -->
    <div class="d-flex justify-content-end">
        {{#board.isBoardOwner}}
            <a href="/board/{{board.id}}/update-form" class="btn btn-warning me-1">수정</a>
            <form action="/board/{{board.id}}/delete" method="post">
                <button class="btn btn-danger">삭제</button>
            </form>
        {{/board.isBoardOwner}}
    </div>

    <div class="d-flex justify-content-end">
        <b>작성자</b> : {{board.user.username}}
    </div>

    <!-- 게시글내용 -->
    <div>
        <h2><b>{{board.title}}</b></h2>
        <hr />
        <div class="m-4 p-2">
            {{board.content}}
        </div>
    </div>

    <!-- 댓글 -->
    <div class="card mt-3">
        <!-- 댓글등록 -->
        <div class="card-body">
            <form action="/reply/save" method="post">
                <input type="hidden" name="boardId" value="{{board.id}}">
                <textarea class="form-control" rows="2" name="comment"></textarea>
                <div class="d-flex justify-content-end">
                    <button type="submit" class="btn btn-outline-primary mt-1">댓글등록</button>
                </div>
            </form>
        </div>

        <!-- 댓글목록 -->
        <div class="card-footer">
            <b>댓글리스트</b>
        </div>
        <div class="list-group">
            <!-- 댓글아이템 -->
            {{#board.replies}}
                <div class="list-group-item d-flex justify-content-between align-items-center">
                    <div class="d-flex">
                        <div class="px-1 me-1 bg-primary text-white rounded">{{user.username}}</div>
                        <div>{{comment}}</div>
                    </div>
                    {{#replyOwner}}
                    <form action="/reply/{{id}}/delete" method="post">
                        <button class="btn">🗑</button>
                    </form>
                    {{/replyOwner}}
                </div>
            {{/board.replies}}
        </div>
    </div>
</div>

{{> layout/footer}}

Untitled

삭제

머스테치 수정

{{#replyOwner}}
<form action="/reply/{{id}}/delete" method="post">
    <input type="hidden" name="boardId" value="{{board.id}}">
    <button class="btn">🗑</button>
</form>
{{/replyOwner}}

히든으로 보더 아이디를 넘겨줌

리플리 컨트롤러에 delete 추가

@PostMapping("/reply/{id}/delete")
public String delete(@PathVariable Integer id, @RequestParam("boardId") Integer boardId) {
    User sessionUser = (User) session.getAttribute("sessionUser");
    replyService.delete(id, sessionUser.getId());

    return "redirect:/board/" + boardId;
}