Aby inny użytkownik nie mógł wyświetlać oraz edytować danych innego użytkownika musimy zastosować autoryzację na poziomie kontrolera.
Jeśli chodzi o wyświetlanie danych możemy to zrobić za pomocą where i podać ID użytkownika zalogowanego przy edycji danych oraz usuwaniu byśmy musieli najpierw sprawdzać czy dany wpis należy do zalogowanego użytkownika i tutaj z pomocą przychodzi Fasada Gate.
Jak użyć Fasady Gate ?
Musimy ją zdefiniować w pliku AuthServiceProvider.php.

- Dodajemy Modele z których chcemy autoryzować dane w moim przypadku było to User i Site.
- Następnie definiujemy Gate. Łączymy dwie tabele ze sobą kluczem w tym przypadku było to id użytkownika.
Następnie używamy go w kontrolerze. Musimy dodać fasadę do kontrolera
use Illuminate\Support\Facades\Gate;
Następnie w danej metodzie przekładowo metoda show.
public function show($id)
{
$site = Site::findOrFail($id);
if (!Gate::allows('menage-site', $site)) {
return response([
'errors' => [
'status' => 'Forbidden',
'code' => 403,
'message' => 'You do not have access to this resource'
]
], 403);
}
return $site;
}
tutaj jest zastosowane w API użytkownik otrzyma kod 403 jeśli spróbuję wyświetlić dane nie swojej strony. Równie dobrze możemy zrobić to tak:
public function show($id)
{
$site = Site::findOrFail($id);
if (!Gate::allows('menage-site', $site)) {
abort(403);
}
return $site;
}

Dodaj komentarz