이 시나리오를 처리하는 더 좋은 방법이 있는지 궁금합니다. 조회수를 간단히 유지하면서도 조회수를 줄이기 위해 노력하고 있습니다.사용자에게 권한이있는 경우에만 결과를 반환합니다.
나는 Books
의 목록이 있습니다. 이 책에 할당 된 사용자 만 도서 및 기타 콘텐츠를 볼 수 있습니다. 기본적으로 API 호출입니다. /Books/
, /Books/Chapters/
, /Books/Chapters/Pages/
등입니다. 사용 권한은 데이터베이스의 Books
항목에 첨부됩니다.
Books
'챕터 ,
페이지'등은 모두 다른 테이블에 있습니다. 사용자 권한은 다른 테이블에 저장됩니다. 테이블은 이런 식입니다.
UserID, BookID
--------------
101 1
102 1
102 2
...
사용자 정보는 API 호출 자체 (기본 인증)에서 가져옵니다. 요청한 Book
이 있지만 해당 사용자에게 Book
에 대한 권한이없는 경우 API는 401 Unauthorized
을 반환해야합니다. 요청한 '도서 does not exist, then it should return
404 찾을 수 없음'.
일반적으로 해당 사용자와 요청한 Book
에 대한 권한을 쿼리로 확인해야합니다. 해당 사용자에 대한 사용자 권한 테이블에 레코드가있는 경우 다른 쿼리를 실행하여 Book
, 'Chapter` 등을 가져 오십시오.
현재이 두 쿼리를'WHERE EXISTS condition that checks for the existence of the record for this user for the requested
Book 권한 테이블에서. 따라서 레코드는 사용자 권한 테이블에 레코드가있는 경우에만 리턴됩니다.
Book
이 없거나 사용자에게 권한이없는 경우이 사실을 알 수 없습니다. 사용자 권한을 별도로 확인하기 위해 데이터베이스 호출을 하나 줄일 수 있습니다. 그리고 이것으로 저는 401
과 404
을 구분할 수 없습니다.
단일 쿼리로 401
과 404
을 구별 할 수있는 반면이 작업을 수행하는 더 좋은 방법이 있습니까? 두 가지 데이터베이스 호출을 수행하는 것이 더 좋습니다.
의견이 있으십니까?
그러면 사용자 권한과 함께 쿼리 결과가 반환됩니까? 사용자가 권한이없는 경우에도 결과를 반환합니다 (존재하는 경우). 하지만 1 대신 null 만 반환합니까? –
@ 케빈 : 맞습니다. 책에 대한 결과 (있는 경우)는 항상 리턴됩니다. 사용자 액세스의 결정은 새 사용 권한 열의 값 (1 또는 NULL)을 기반으로합니다. –