Laravel autoryzacja użytkownika i danych użytkownika przy użyciu Gate

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.

  1. Dodajemy Modele z których chcemy autoryzować dane w moim przypadku było to User i Site.
  2. 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;
    }
Taki widok otrzyma użytkownik który nie ma uprawnień do danego zasobu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *