개발 잘해지는 닉네임
298
2021-07-25 21:07:58
1
146

권한체계 구현하는거 도와주실분...


권한을 구현하다가 모르는게 있어서 질문 드립니다. 언어무관이기 때문에 코드는 슈도코드로 적을게요..


배달의 민족과 같은걸 만든다고 해볼게요. 식당의 메뉴를 삭제하는건 ADMIN권한이 있어야 해요. 그래서 다음과 같이 만들었습니다.

@HasRole('ADMIN') // deleteMenu함수 실행전ADMIN권한이 있는지 확인함
deleteMenu() {
  ...
}


그런데 문제는 식당이 내 식당만 있는게 아니잖아요. A의식당, B의식당등등 계속해서 생겨나는데 그냥 밑도 끝도 없이 'ADMIN'으로만 검사하는게 안좋은거 같아서 특정 식당에 대해 권한이 있는지 검사하는 어노테이션을 다음과 같이 만들었어요

// deleteMenu함수실행전restaurantId에 대해 ADMIN권한이 있는지 확인함
@HasRestaurantRole(restaurantId, ['ADMIN'])
deleteMenu() {
  ...
}


이제 함수 시작전에 특정 식당의 ADMIN이 있는지 확인할 수 있어서 잘 동작하고 있습니다. 그런데 문제는 내 식당에 달린 리뷰를 삭제하는걸 만들려고 하니까 문제가 생깁니다. 리뷰는 리뷰작성자와 식당주인이 가능한데, 둘중 하나를 걸러내는 방법을 모르겠어요 대충 코드로 표현하면 다음과 같이 하고 싶은데 방법이 없을까요?

@HasRestaurantRole(restaurantId, ['ADMIN']) || @IsMyReview(reviewId)
deleteReview() {
   ...
}


이쯤되니 에초에 권한체계를 잘못 만들었다 싶기도 하네요 ㅠ 어떻게 해야할까요? 구조를 다 뜯어고쳐야 하나요? 조언 부탁드립니다




0
  • 답변 1

  • 지붕뚫고높이차
    1k
    2021-07-25 22:06:57
    서비스 : 삭제기능
    권한 : 관리자, 리뷰작성자, 음식점주인

    이때 권한은 2가지 종류로 구분하면 됩니다.

    인증기준인 관리자와
    특정 서비스 기준인 리뷰작성자, 음식점주인
    으로 권한코드를 구분 할 수 있고

    접근제어를 판단하는 메소드를 실행하기 전에
    게시물을 읽고
    리뷰작성자 음식점 주인 여부를 판단할 수 있는
    기능을 만들고 실행한뒤 관련 플레그를

    접근제어 메소드로 전달하면 됩니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.