개발 잘해지는 닉네임
298
2021-06-15 14:58:10
9
170

게시글에 대한 권한을 동적으로 주고싶은데 어떤식으로 해야 할까요?


유저 A, B, C, D가 있고 게시글이 가, 나 있을때 

게시글 '가'에 대한 수정 권한을 A,B,C에게 주고, 삭제권한을 C, D에 주고

게시글 '나'에 대한 조회권한을 A, B가 갖는등 

동적으로 생성되는 게시글에 대한 권한을 다룰수 있게 코딩을 해야하는 상황입니다.


권한관련을 검색해 보니 스프링시큐리티 보라는 말이 많아서 대충 훑어봤는데 시큐리티는 특정 entry point에 대해 정적인 권한 여부만 검사하는거 같아서 위와 같은 상황에대해 커버하지 못하는거 같습니다. (제가 잘못 이해했을수도 있음)


그리고 지금은 게시판이란 개념이 없는데 나중에는 게시판또한 생겨나고 이또한 동적으로 늘어날 가능성이 있으며, 게시판 전체에 대한 권한(CURD)또한 설정할 수 있어야 합니다 ㅠ 어떤로직으로 db설계와 코딩을 해야할까요? 코드도 좋고 로직만 알려주셔도 감사합니다!


고수님들 도와주세요

0
  • 답변 9

  • 클라이번
    172
    2021-06-15 15:22:03

    Spring security로 사용자별 Role을 지정하고, 해당 Role을 기준으로 권한별 화면 접근을 제어한 뒤

    모두가 쓰는 공용 화면(ex -게시판..)에서 사용자별 Role을 기준으로 기능을 나누면 되지 않을까요?


    권한 Role에 대한 값을 세션, 혹은 사용자 정보등에 담아두고

    화면에서 해당 값을 참조하며 버튼등을 다르게 보여주는 등으로 처리하면 좋지 않을까 싶습니다.


    게시판 같은 경우 이미 수많은 개발자 분들이 github에 예제 코드와 DB설계등을 올려두신게 많으니

    그런 Repository를 참고하며 설계를 해보시는것도 좋겠네요.

  • woo.s.o
    503
    2021-06-15 15:26:20

    회원테이블 자체에 레벨 등급을 주어 읽기 수정 삭제 기능을 부여 하셔도 되구요

    -> 로그인시 global한 세션값에 회원 레벨이 있겠죠?


    게시글 자체에 특정인 지정을 해야 한다면 게시글 자체에 대해 수정,삭제 권한에 대한 컬럼을 (회원의 유니크한 idx를 구분자로  저장해뒀다가 split 하여 불러오게끔?) 각각 두시고 삭제 수정 이벤트시 데이터 조회하여 일치하면 이벤트 실행 일치 하지 않으면 alert으로 예외처리 하는 방식도 있구요.


    방법은 짜기 나름입니다


  • 클라이번 Role을 지정하고는 싶은데 어떻게 지정할 수 있을까요?ㅠㅠ 인터넷을 찾아봐도 "수정" 기능에 대한 Role지정은 있지만 "게시글 '가', '나'에대한 수정"기능은 못찾겠습니다.


    woo.s.o 칼럼하나에 'A','B','C'와 같이 들어있고 이를 구분자 ','으로 split한다면 1정규화를 하지 않는거같아 마음이 내키지 않는데 실무에서는 이러한 이론적인걸 배제하고 만들어도 괜찮을까요?




  • 클라이번
    172
    2021-06-15 16:09:01

    https://shinsunyoung.tistory.com/78

    참고해보시는게 좋겠네요. 위 예제에선 input 으로 Role을 지정해 가입시키지만,

    당연히 실제 프로젝트에서는 JAVA쪽같이 사용자가 Role을 지정할 수 없게끔 해야 할 필요가 있겠지요

  • 클라이번
    172
    2021-06-15 16:10:35

    아 제가 좀 잘못 읽었었네요.

    하나의 게시판중 특정 게시물에 대한 수정권한이 특정 규칙에 따른게 아닌 관리자가 지정하는 아무 사용자에게 부여되는거라면, ID값등을 별도로 저장하고 있는게 맞아 보입니다.

    해당 게시물에 같이 저장해둔다던지, 아니면 별도의 테이블로 빼도 되겠지요

  • woo.s.o
    503
    2021-06-15 16:16:47 작성 2021-06-15 16:23:34 수정됨

    전 한가지 케이스에 대해 말씀 드린거고 다른 좋은 방법도 많을 겁니다.

    구분자로 하기 싫다면 윗분 말씀대로 별도의 테이블로 빼서 관리 하셔도 됩니다.

    가령 게시글별 권한 테이블이 필요 하겠죠

    테이블 컬럼엔

    - 게시글 고유 IDX

    - 유저 고유 IDX

    - 글에 대한 권한 타입

    (뭐 A,B,C나 기타 용어로 지정하여 A 일경우는 읽기만 B일때는 읽기,수정 C일땐 전체 권한 D일땐 읽기,삭제만 등등등)


    그리고 게시글 IDX와 유저 IDX를 묶어서 인덱스 거시고 유니크하게 설정 하여 중복 삽입을 방지 하시면 되겠죠?


    이렇게 지정하시고 삭제 혹은 수정 이벤트시 게시글의 idx와 유저 idx 값으로 조회하여 권한 타입 컬럼이 있는지 유무와 해당 타입이 삭제 수정 이 되는지 판별 하시면 되겠죠


    추후로 게시판이 확장되면 권한 테이블에  게시판 명칭타입 컬럼도 추가 할 수 있겠죠.

    확장성을 고려하셔서 짜시면 됩니다.

  • 개발 잘해지는 닉네임
    298
    2021-06-15 16:38:56

    클라이번 역시 그렇겠죠? 시큐리티 처럼 잘 만들어진 틀이 있다면 비슷하게 만들고 싶었는데 결국 마음대로 구현해야하겠네요.. 답변 감사합니다!


     woo.s.o 가장 좋은 방법이 뭐가 있을까요 사실 구현이 안되는게 아니라 내 마음대로 로직짜두면 소스보는 다른분이 불편할까봐 질문한거였습니다 ㅠㅠ

  • woo.s.o
    503
    2021-06-15 16:50:37 작성 2021-06-15 16:51:39 수정됨

    방법론에 대해 물어보신다면 음 글세요? 아는만큼 보이는 거겠죠 ㅎㅎ

    DB 테이블에 대한 정의서와 프로세스 로직에 대해 주석과 문서만 잘 정리하신다면 그게 제일 베스트 아닐까요?


    게시판이나 페이지별 권한이 아닌 각각의 게시글에 사용자별로 권한도 각각 따로 하려면 결국 게시판 글과 사용자 간에 관계를 설정 해줘야 하니까요

    모든 이벤트에 대한 정의가 있어야 하니 결국엔 주체가 되는 게시글에 컬럼으로 몰빵을 하던 테이블 하나를 뚝 때서 게시글과 사용자간의 관계를 설정 해줘야 하니까요


  • 개발 잘해지는 닉네임
    298
    2021-06-15 17:17:45

    woo.s.o 역시 그게 최선이겠죠. 최근데 어노테이션이랑 복잡한 로직을 만들다 보니 표준화 되어있는게 있다면 무조건 따르고 싶어서 그런게 있나싶어 물어봐봤습니다. 답변 감사해요~~

  • 로그인을 하시면 답변을 등록할 수 있습니다.