Witam, wiem, że pytanie z początku brzmi dość dziwnie. Ale już tłumaczę o co mi chodzi.
Na początku bardzo banalny przykład, mamy jakieś proste API dla notatnika. Każdy użytkownik ma swoje prywatne notatki, każda notatka zawiera referencje do jej właściciela. Mamy tu odpowiednie restrykcje, polegające na tym, że tylko właściciel notatki ma do niej jakiekolwiek prawa (odczytu, zapisu itd..).
Zgodnie z regułami, jeśli użytkownik chce wykonać żądanie http dla notatki, która do niego nie należy, to dostanie on odpowiedź o statusie 403. Jeżeli to samo zrobi niezalogowany gość, to otrzyma on status 401.
Niby wszystko jest oczywiste, może się tu jednak pojawić pewna niedogodność. Jeśli referencje do ID właściciela zawiera notatka, to sprawdzenie uprawnień do odczytu będzie możliwe dopiero po jej pobraniu z bazy. Nie jest to oczywiście jakiś duży problem, ale teoretycznie można załatwić sprawę prościej.
Co gdyby prawo własności załatwić już na poziomie zapytania do bazy? Np.
Note.find({ _id: "givenID", owner: "givenUserID" }) // musi się zgadzać zarówno ID notatki, oraz ID właściciela
Takie podejście do sprawy bardzo uprościło by cały proces. Wystarczyło by dodać ten jeden drobny query do jakiegoś middleware i cała kwestia uprawnień była by załatwiona w jednym miejscu.
Niestety, minus jest taki, że teraz gdy nie mamy uprawnień do zasobu, to nie otrzymamy statusu 403, lecz zawsze 404 - i tu jest sedno sprawy.
Nie wydaje mi się osobiście, żeby to był duży problem, po co komuś kto eksperymentuje z API (zamiast zadowolić się stworzonym frontendem) dawać dodatkowe informacje? Z innej strony nie wiem czy takie rozwiązanie nie będzie łamać założeń statusów http.
Jak podejść do tematu? Która metoda jest bardziej "pro"? A może ta kwestia powinna być jeszcze inaczej załatwiona?
Bardzo dziękuję doświadczonym osobom za rady i serdecznie pozdrawiam 