Rozbudowane api resource czy osobny kontroler?

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?

- /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?

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ć 

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

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

potem w kontrolerze piszesz

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1