Heim  >  Artikel  >  Backend-Entwicklung  >  Autorisierung: Richtlinien in Laravel verstehen

Autorisierung: Richtlinien in Laravel verstehen

Linda Hamilton
Linda HamiltonOriginal
2024-10-18 22:08:31340Durchsuche

Die Kontrolle darüber, was Benutzer in Ihrer Anwendung tun können und was nicht, ist eines der wichtigsten Dinge, die Sie beim Erstellen realer Anwendungen tun müssen.

In einer Aufgabenanwendung möchten Sie beispielsweise nicht, dass ein Benutzer die Aufgaben anderer Benutzer bearbeiten oder löschen kann.

In diesem Artikel lernen Sie eine der nahtlosen Möglichkeiten kennen, dies in Laravel zu tun, indem Sie mithilfe von Richtlinien steuern, was Benutzer tun können, indem Sie eine einfache Aufgabenanwendung erstellen.

Um diesem Tutorial folgen zu können, müssen Sie über ein grundlegendes Verständnis von Laravel und seiner Anwendungsstruktur verfügen.

Erstellen Sie eine Basisanwendung

Führen Sie den folgenden Befehl aus, um eine neue Laravel-Anwendung in Ihrem gewünschten Ordner zu erstellen und dorthin zu verschieben:

composer create-project laravel/laravel todo-app && cd todo-app

Führen Sie als Nächstes den folgenden Befehl aus, um Laravel Breeze zu installieren:

php artisan breeze:install

Breeze wird Ihre neue Anwendung mit einer Authentifizierung ausstatten, sodass sich Ihre Benutzer registrieren, anmelden und abmelden und ihre personalisierten Dashboards anzeigen können.

Kompilieren Sie anschließend Ihre Anwendungsressourcen, indem Sie die folgenden Befehle ausführen:

npm install && npm run dev

Laravel wird standardmäßig mit der dateibasierten SQLite-Datenbank geliefert. Als Nächstes müssen Sie also Ihre Anwendungsdatenbankdatei mit einem Datenbank-Viewer wie TablePlus oder einem anderen Ihrer Wahl verbinden.

Nachdem Sie Ihre Datenbank mit dem Viewer verbunden haben, führen Sie die folgenden Befehle aus, um die verfügbaren Tabellen in Ihre Datenbank zu migrieren:

php artisan migrate

Sobald dies erledigt ist, führen Sie den folgenden Befehl aus, um Ihre Anwendung im Browser anzuzeigen:

php artisan serve

Sie sollten jetzt Ihre neue Laravel-Anwendung unter localhost:8000 sehen, die so aussieht:

Authorization: Understanding Policies in Laravel

Sie können jetzt zur Registrierungsseite gehen, um einen Benutzer zu erstellen und auf das Dashboard zuzugreifen, das an dieser Stelle die gesamte Anwendung darstellt.

Modelleinrichtung

Modelle in Laravel werden zur Steuerung von Datenbanktabellen verwendet. Verwenden Sie den folgenden Befehl, um ein Todo-Modell im Ordner App/Models zu erstellen:

php artisan make:model Todo

Als nächstes ersetzen Sie in der neu erstellten Datei die Todo-Klasse durch den folgenden Code:

class Todo extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'description',
        'completed',
        'user_id'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Der obige Code ermöglicht es Benutzern, ein Formular mit den $fillable-Eigenschaften einzureichen; es definiert auch die Beziehung zwischen einem Benutzer und einem Todo; In diesem Fall gehört eine Aufgabe einem Benutzer. Schließen wir die Einrichtung der Beziehung ab, indem wir den folgenden Code zur Datei App/Models/User.php hinzufügen:

    public function todos()
    {
        return $this->hasMany(Todo::class);
    }

Der obige Code verbindet das Benutzermodell mit dem Todo-Modell, sodass es viele Aufgaben haben kann.

Migrations-Setup

Migrationen in Laravel werden verwendet, um anzugeben, was in einer Datenbanktabelle enthalten sein soll. Führen Sie den folgenden Befehl aus, um eine Migration im Ordner „database/migrations“ zu erstellen:

composer create-project laravel/laravel todo-app && cd todo-app

Als nächstes ersetzen Sie die up-Funktion in der neuen Datei durch die folgende, die die Todo-Tabelle mit den Spalten „id“, „user_id“, „title“, „beschreibung“, „abgeschlossen“ und „Zeitstempel“ zur Datenbank hinzufügt:

php artisan breeze:install

Führen Sie als Nächstes den folgenden Befehl aus, um die Todos-Tabelle zur Datenbank hinzuzufügen:

npm install && npm run dev

Richtlinieneinrichtung

Mit Richtlinien in Laravel können Sie definieren, wer was mit einer bestimmten Ressource, in diesem Fall Todos, tun kann.

Sehen wir uns an, wie das funktioniert, indem wir mit dem folgenden Befehl eine TodoPolicy im Ordner „App/Policies“ generieren:

php artisan migrate

Als nächstes ersetzen Sie in der neu erstellten TodoPolicy-Datei die TodoPolicy-Klasse durch den folgenden Code:

php artisan serve

Der obige Code gibt an, dass ein Benutzer eine Aufgabe erstellen, aber nur eine Aufgabe anzeigen, aktualisieren oder löschen kann, die ihm gehört.

Als nächstes richten wir im nächsten Abschnitt den Controller ein.

Controller-Setup

Controller in Laravel steuern die Funktionalität der App für eine bestimmte Ressource. Führen Sie den folgenden Befehl aus, um einen TodoController innerhalb der App/Http/Controllers zu generieren:

php artisan make:model Todo

Fügen Sie den folgenden Code oben in die neu erstellte TodoController-Datei ein, um das Todo-Modell für Datenbankoperationen und die Gate-Klasse für die Autorisierung zu importieren:

class Todo extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'description',
        'completed',
        'user_id'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Indexmethode

Ersetzen Sie die Indexmethode durch den folgenden Code, der alle Aufgaben aller angemeldeten Benutzer abruft und zurückgibt:

    public function todos()
    {
        return $this->hasMany(Todo::class);
    }

Die Gate::authorize-Methode überprüft, ob der Benutzer mit der viewAny-Richtlinienmethode angemeldet ist, die Sie im vorherigen Abschnitt definiert haben.

Methode erstellen

Ersetzen Sie die Erstellungsmethode durch den folgenden Code, der überprüft, ob der Benutzer angemeldet ist, bevor das Formular zum Erstellen von Aufgaben an den Benutzer zurückgegeben wird, damit dieser Aufgaben erstellen kann:

php artisan make:migration create_todos_table

Store-Methode

Ersetzen Sie die Store-Methode durch den folgenden Code, der prüft, ob der Benutzer eine Aufgabe erstellen kann, die Anfrage validiert, die Aufgabe erstellt und den Benutzer zur Aufgabenlistenseite weiterleitet:

   public function up(): void
    {
        Schema::create('todos', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->onDelete('cascade');
            $table->string('title');
            $table->text('description')->nullable();
            $table->boolean('completed')->default(false);
            $table->timestamps();
        });
    }

Methode bearbeiten

Ersetzen Sie die Bearbeitungsmethode durch den folgenden Code, der überprüft, ob der Benutzer diese Aufgabe bearbeiten kann, bevor das Bearbeitungsformular für die Aufgabe mit der ausgewählten Aufgabe an den Benutzer zurückgegeben wird, damit dieser sie bearbeiten kann:

php artisan migrate

Update-Methode

Ersetzen Sie die Aktualisierungsmethode durch den folgenden Code, der prüft, ob der Benutzer die Aufgabe aktualisieren kann, die Anfrage validiert, die ausgewählte Aufgabe aktualisiert und den Benutzer zur Aufgabenlistenseite weiterleitet:

php artisan make:policy TodoPolicy --model=Todo

Zerstörungsmethode

Ersetzen Sie die Methode destroy durch den folgenden Code, der prüft, ob der Benutzer die Aufgabe löschen kann, sie löscht und den Benutzer zur Aufgabenlistenseite umleitet:

class TodoPolicy
{
    /**
     * Determine if the user can view any todos.
     */
    public function viewAny(User $user): bool
    {
        return true;
    }

    /**
     * Determine if the user can view the todo.
     */
    public function view(User $user, Todo $todo): bool
    {
        return $user->id === $todo->user_id;
    }

    /**
     * Determine if the user can create todos.
     */
    public function create(User $user): bool
    {
        return true;
    }

    /**
     * Determine if the user can update the todo.
     */
    public function update(User $user, Todo $todo): bool
    {
        return $user->id === $todo->user_id;
    }

    /**
     * Determine if the user can delete the todo.
     */
    public function delete(User $user, Todo $todo): bool
    {
        return $user->id === $todo->user_id;
    }
}

Ihre TodoController-Datei sollte jetzt so aussehen:

composer create-project laravel/laravel todo-app && cd todo-app

Ansichten-Setup

Da nun alle TodoController-Methoden festgelegt sind, können Sie nun die Ansichten für Ihre Anwendungen erstellen, indem Sie einen neuen Todos-Ordner im Ordner resources/views erstellen. Erstellen Sie anschließend die Dateien „create.blade.php“, „edit.blade.php“ und „index.blade.php“ im neuen Todos-Ordner.

Indexansicht

Fügen Sie den folgenden Code in index.blade.php ein:

php artisan breeze:install

Ansicht erstellen

Fügen Sie den folgenden Code in die Datei create.blade.php ein:

npm install && npm run dev

Ansicht bearbeiten

Fügen Sie den folgenden Code in edit.blade.php ein:

php artisan migrate

Routen-Setup

Die Handhabung von Routen für Ihren TodoController ist mit der Ressourcenmethode in Laravel relativ einfach. Fügen Sie dazu am Ende des Ordners „routes/web.php“ den folgenden Code hinzu:

php artisan serve

Der obige Code verwendet die Authentifizierungs-Middleware, um die Todos-Ressource zu schützen. Folgende Routen sollten Sie nun in Ihrer Bewerbung besuchen können, nachdem Sie eingeloggt sind:

  • /todos: Listet die Todos aller Benutzer auf
  • /todos/create: Zeigt das Formular zum Erstellen von Todos an
  • /todos/edit/1: Zeigt das Formular zum Bearbeiten einer Aufgabe mit der angegebenen ID an; 1 in diesem Fall.

Sie können jetzt Aufgaben erstellen, bearbeiten und löschen, ABER nur als angemeldeter Benutzer und Eigentümer der ausgewählten Aufgaben beim Bearbeiten und Löschen.

Abschluss

Und das ist es! Sie haben gerade eine realistische Aufgabenanwendung erstellt, mit der Benutzer NUR ihre eigenen Aufgaben erstellen, anzeigen, bearbeiten und löschen können. Bitte teilen Sie mir in den Kommentaren mit, wenn Sie Korrekturen, Vorschläge oder Fragen haben!

Denken Sie zum Schluss daran, mir hier auf Dev, LinkedIn und Twitter zu folgen. Vielen Dank fürs Lesen, wir sehen uns beim nächsten!

Das obige ist der detaillierte Inhalt vonAutorisierung: Richtlinien in Laravel verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn