Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

인증처리 - 본인이 작성한 것만.. 본문

Project/블로그 게시판 만들기

인증처리 - 본인이 작성한 것만..

Seung__ 2021. 10. 13. 22:34

1. 요구사항


  • 본인이 작성한 글만 수정, 삭제가 가능해야 한다.
  • 본인이 작성한 댓글만 삭제가 가능해야 한다.

 

 

 

2. 로직 컨셉.


  • 버튼을 통해 접속하는 경우 차단
    • 해당 글에 대한 수정/삭제 권한이 없는 경우 => post.member.id가 member.id 와 다른 경우
    • memberDto.authority에 "nonAuthorized"추가.
    • 각 뷰에서 권한 판단이 필요할 경우 ${member.authority}를 사용하여 수정/삭제 버튼을 비활성화 시킴. 
  • url을 통한 직접 접속
    • Session에서 로그인 정보를 가져왔을 때
    • session에 로그인 유저의 정보가 없거나, 유저의 authority가 nonAuthorized인 경우 목록으로 redirect시켜버림.

 

 

3. PostController


  • loginMember가 권한이 있는지 확인하는 메서드를 추가.
  • 인증이 필요한 메서드에 hasNoAuthority()를 추가해 주자.
    @GetMapping("/{postId}/edit")
    public String editForm(@PathVariable("postId") Long postId, HttpServletRequest request, Model model){
        MemberDto loginMemberDto = getLoginMember(request);

        if (hasNoAuthority(loginMemberDto)) return "redirect:/posts";

        getLoginMemberAndAddToModel(request, model);

        PostDto postDto = postService.findPostById(postId).postToDto();
        model.addAttribute("post", postDto);

        return "post/editform";
    }

	private boolean hasNoAuthority(MemberDto loginMemberDto) {
        if (loginMemberDto == null || loginMemberDto.getAuthority().equals(Authority.nonAuthorized)) {
            return true;
        }
        return false;
    }

 

4. View


  • 글 수정, 삭제버튼
        <form th:action="@{/posts/{postId}/delete(postId=${post.id})}" method="post">
            <button class="btn btn-primary" type="button"
                    th:disabled="${member.authority}=='nonAuthorized'"
                    th:onclick="|location.href='@{/posts/{postId}/edit(postId=${post.id})}'|">수정</button>
            <button class="btn btn-secondary float-end" type="submit"
                    th:disabled="${member.authority}=='nonAuthorized'"
                    th:onclick="|location.href='@{/posts/{postId}/delete(postId=${post.id})}'|">삭제</button>
        </form>
  • 댓글 삭제 버튼
    • 댓글의 경우 댓글의 작성자와 로그인 유저를 비교.
    • 로그인 하지 않은 경우 member.id가 존재하지 않기 때문에 항상 true로 비활성화됨.
          <form th:action="@{/comments/{commentId}/delete?postId={id}(commentId=${comment.id}, id=${post.id})}" th:object="${commentDto}" method="post">
                <button type="submit" class="btn-close" aria-label="Close"
                        th:disabled="${member.id} != ${comment.member.id}"></button>
            </form>

 

 

5. 결과


  • 로그인 유저가 작성하지 않은 댓글, 글은 삭제/수정이 불가능.

  • 본인이 작성하지 않은 글/댓글 삭제/수정 url을 직접 접속하면 글 목록으로 redirect

접속 시도

 

  • 권한이 없는 url로 접속한 결과 redirect되었다.

 

  • delete의 경우 GET메서드가 없고 POST만 있어서 애초에 접속이 안됨 ㅋㅋㅋ

 

흠.. 그런데 이렇게 인증 로직을 모든 메서드에 일일히 적용해 줘야 하나.. 귀찮은데..

 

6. 앞으로..


  • est용 data 서버시작할 때 DB에 올리기
  • Listener
    • createdAt, updatedAt등
  • 게시글에 작성자 표시
  • view 정리
  • 게시글 검색
    • 검색 옵션 추가 : 작성자, 제목 구분
  • 영속성 전이 설정
    • 게시글 삭제
    • 회원 탈퇴
  • 댓글 삭제 버튼
  • 글 수정 기능 추가
  • 대댓글
  • 검증 & 예외처리
    • 회원 가입시 필수 정보 지정.
    • 특수문자, 공백 검증 등(email  형식?)
    • Spring제공 Validator로 변경.
  • 인증처리
    • 로그인한 사용자만 글 & 댓글 작성 가능.
    • 본인이 작성한 글, 댓글만 수정/삭제 가능
    • 관리자는 모든 권한
  • 예외처리
  • 페이징 처리
  • 컬렉션 조회 최적화

 

7. GitHub: 211013 Check Authorization


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

'Project > 블로그 게시판 만들기' 카테고리의 다른 글

SpringInterceptor  (0) 2021.10.15
관리자 권한  (0) 2021.10.14
비 로그인 사용자 처리  (0) 2021.10.12
특수문자 및 공백 검증  (0) 2021.10.12
회원가입시 검증 기능 추가 - 검증 직접 처리  (0) 2021.10.12
Comments