2017-05-05 6 views
1

관리자와 표준 사용자라는 두 종류의 사용자가 있다고 가정합니다.사용자 권한으로 RESTful API에서 리소스를 필터링하는 가장 좋은 방법은 무엇입니까?

post 리소스가 있습니다. GET 방법의 경우 관리자가 모든 게시물을 보도록하고 표준 사용자는 게시물 만 볼 수 있도록하려면 post.created_by={currentUserID}을 입력하십시오.

  • 사용 /api/post/api/mypost :

    은 지금은 세 가지 옵션이 있습니다. 위쪽은 반환 된 결과를 쉽게 제어하고 사용자 범위를 기반으로 다른 권한을 지정할 수 있습니다. 단점은 코드와 문서를 반복하는 것입니다.

  • 두 사용자 모두 /api/post을 사용하고 표준 사용자의 경우 ?createdBy={id}이없는 경우 요청을 거절하십시오.

  • 두 가지 모두에 /api/post을 사용하십시오. 그러나 인증 방법에 따라 다르게 동작합니다. 표준 사용자의 경우 반환 된 목록은 항상 필터링됩니다. /api/post/{id}에 대해 사용자에게 속하지 않는 게시물에 대해 HTTP 403을 반환합니다.

어느 것이 좋습니까?

답변

0

첫 번째 옵션은 이상한 것이 아닙니다. (말씀하신대로) 코드 중복이 발생하기 쉽습니다.

두 번째 것이 currentUserID뿐만 아니라 이해가된다면 잘 작동했을 수도 있습니다.

그러나 인증 방법 중 어느 것이 든 반드시 수행해야합니다. 세 번째 옵션은 아마도 가장 널리 보급 된 솔루션 일 것입니다. 다른 사용자는 자신의 권한/포트폴리오에 따라 깨끗한 방식으로 URL의 쿼리 문자열을 어지럽히 지 않고 다른 것을 보게됩니다.

0

는 기본적으로 아무런 차이가 없다 그냥 라우팅된다 /api/post 또는 /api/mypost, /api/post/{id} = /api/post/{createdBy} = /api/post?createdby={id}. 관리자를위한 관리 영역 만 추가 할 수도 있습니다.

그러나 모든 옵션에 적용되는 규칙이 하나 있습니다. 관리자는 모든 권한을 가지며 일반 사용자는 자신의 게시물에만 액세스 할 수 있습니다.

ID가 지정되었지만 일치하는 게시물이없는 경우 관리자와 사용자 모두에게 '찾을 수 없음'을 반환합니다.

어느 것이 좋습니까?

그건 내게 달린 문제입니다. 그것은 당신의 디자인에 달려 있습니다.

코드를 유지 관리해야하므로 응용 프로그램을 논리적 (또는 기능적)으로 구조화해야합니다. 중복 된 코드의 경우, (일반) 함수, 확장 또는 'HelperClasses'를 사용하고 리포지토리를 사용하십시오.