0Pricing
PHP Academy · Lektion

Policies: Autorisierung auf Modellebene

Verknüpfen Sie Policies mit Eloquent-Modellen und verwenden Sie sie in Controllern.

Policies: Autorisierung auf Modellebene ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist eine Policy?

Eine Policy ist eine Klasse, die die Autorisierungslogik für ein bestimmtes Eloquent-Modell organisiert. Policies werden empfohlen, wenn Sie mehrere Autorisierungsaktionen für dasselbe Modell haben.

Eine Policy generieren

Verwenden Sie Artisan, um eine Policy zu generieren. Fügen Sie --model hinzu, um standardmäßige Methoden vorab auszufüllen.

$ php artisan make:policy PostPolicy --model=Post

Policy-Methoden

Jede Methode entspricht einer Aktion. Sie erhält den authentifizierten Benutzer und die Modellinstanz.

<?php
class PostPolicy
{
    public function view(?User $user, Post $post): bool
    {
        return $post->is_published || $user?->id === $post->user_id;
    }

    public function update(User $user, Post $post): bool
    {
        return $user->id === $post->user_id;
    }

    public function delete(User $user, Post $post): bool
    {
        return $user->id === $post->user_id || $user->isAdmin();
    }
}

Policies registrieren

In Laravel 11+ werden Policies automatisch erkannt, wenn sie den Namenskonventionen folgen (Post-Modell → PostPolicy). Sie können sie auch manuell im AuthServiceProvider registrieren.

Policies in Controllern verwenden

Rufen Sie $this->authorize("action", $model) auf — Laravel findet die passende Policy automatisch.

<?php
public function update(Request $request, Post $post): RedirectResponse
{
    $this->authorize("update", $post);
    $post->update($request->validated());
    return redirect()->route("posts.show", $post);
}

Policy in Blade

Die @can-Direktive funktioniert mit Policies genauso wie mit Gates.

@can('update', $post)
    <a href="/posts/{{ $post->id }}/edit">Edit</a>
@endcan

before()-Methode

Die optionale Methode before() einer Policy wird vor den anderen Methoden ausgeführt. Geben Sie true zurück, um pauschalen Zugriff zu gewähren (z. B. für Administratoren).

<?php
public function before(User $user, string $ability): ?bool
{
    if ($user->isAdmin()) return true;
    return null; // continue to specific method
}

Create-Aktion (keine Modellinstanz)

Die create-Methode einer Policy erhält nur den Benutzer, da noch keine Instanz existiert.

<?php
public function create(User $user): bool
{
    return $user->hasVerifiedEmail();
}

Policies manuell prüfen

Verwenden Sie die Gate-Fassade oder das Benutzermodell, um Policies direkt zu prüfen.

<?php
Gate::allows("update", $post);    // true/false
$user->can("update", $post);      // true/false
$user->cannot("delete", $post);   // true/false

Policy-Responses

Geben Sie aus einer Policy-Methode ein Response-Objekt zurück, um die Ablehnungsnachricht anzupassen.

<?php
use Illuminate\Auth\Access\Response;

public function publish(User $user, Post $post): Response
{
    return $user->isEditor()
        ? Response::allow()
        : Response::deny("Only editors can publish posts.");
}

Policies testen

Testen Sie Policies, indem Sie in PHPUnit als ein bestimmter Benutzer agieren.

<?php
public function test_owner_can_delete_post(): void
{
    $user = User::factory()->create();
    $post = Post::factory()->create(["user_id" => $user->id]);
    $this->assertTrue($user->can("delete", $post));
}

Zusammenfassung

Policies bündeln die Autorisierung auf Modellebene. Generieren Sie sie mit make:policy --model. Verwenden Sie $this->authorize() in Controllern und @can in Blade. Verwenden Sie before(), um die Autorisierung für Administratoren zu umgehen.

Schnelltest

Welche Policy-Methode erhält nur den Benutzer ohne Modellinstanz?

Häufig gestellte Fragen

Ist die Lektion „Policies: Autorisierung auf Modellebene“ kostenlos?

Ja — der vollständige Text von „Policies: Autorisierung auf Modellebene“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Policies: Autorisierung auf Modellebene“?

Verknüpfen Sie Policies mit Eloquent-Modellen und verwenden Sie sie in Controllern. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um PHP Academy zu starten?

Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Policies: Autorisierung auf Modellebene“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?

Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Authentifizierung mit Laravel Breeze
  2. Routen mit Middleware schützen
  3. Gates: Einfache Autorisierungsprüfungen
  4. Policies: Autorisierung auf Modellebene
← Zurück zu PHP Academy