Rozbudowane api resource czy osobny kontroler?

Rozbudowane api resource czy osobny kontroler?
S1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Piszę w Laravelu i mam kontroler na którym jest standardowy crud. Zwraca on dane widoczne dla wszystkich.

Teraz chciałbym zrobić, aby właściciel rekordów otrzymywał więcej danych. I tu nasuwa się pytanie: dodać warunkowe dane w api resource pod tym samym adresem czy dla właściciela zrobić nowy kontroler?

Kopiuj
- /rekordy
- /owner/rekordy

I druga kwestia: front mam na NextJS. Chciałbym, aby strona z większą ilością danych mogła się wyświetlać tylko właścicielowi.
Więc jeśli bym wybrał 1 sposób to do api resource dodawać jakiś parametr, który określa że zalogowany użytkownik jest właścicielem? W drugim przypadku by było prościej, bo mając osobny kontroler mogę zwrócić 403 i wtedy na froncie już sprawa prosta.

Doradzicie?

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1023
1
sesaj12733 napisał(a):

Teraz chciałbym zrobić, aby właściciel rekordów otrzymywał więcej danych. I tu nasuwa się pytanie: dodać warunkowe dane w api resource pod tym samym adresem czy dla właściciela zrobić nowy kontroler?

Tutaj nie ma dobrej odpowiedzi. REST traktuje zasoby jako drzewo a w tym wypadku masz graf. Zrób jak ci pasuje najbardziej. Osobiście wolałbym chyba osobny endpoint, bo ostatecznie jest prościej (mniej przełączników, łatwiejsze do zamodelowania i zrozumienia w swaggerze)

sesaj12733 napisał(a):

Więc jeśli bym wybrał 1 sposób to do api resource dodawać jakiś parametr, który określa że zalogowany użytkownik jest właścicielem? W drugim przypadku by było prościej, bo mając osobny kontroler mogę zwrócić 403 i wtedy na froncie już sprawa prosta.

Raczej jakiś token do autentykacji. Przecież użytkownik na froncie nie może powiedzieć spoko jestem właścicielem tego zasobu, backend musi to sprawdzić 

KW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

Twoja logika jest bez sensu, z niej wynika ze jesli dodlalem 2 rekordy do twojej tabeli to wchodzac na liste tych rekordow zobacze wiecej bo jestem wlascicelem dwoch rekordow? to totalnie bez sensu. Zdefiniuj co to znaczy wlasciciel rekordow?

czyli if user_id = user_id z tbaeli w jakimkolweiek wisie to na koncu SQL zrob limit(1000) a jeslinei to ->limit(10)

jesli masz na mysli admina to robisz gate w provider auth i potem w kodzie

przyklad gate

Kopiuj
Gate::define('isAdmin', function($user) {
            return $user->role_symbol == User::ADMIN
                ? Response::allow()
                : Response::deny(__('You do not have permission.'));
        });

potem w kontrolerze piszesz

Kopiuj
$request->user('api')->can('isAdmin') 
$data = Model::where(.... i jakies warunki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.