Laravel - Autorisierung: Ein Anfängerleitfaden
Hallo那里,未来的Laravel-Entwickler! Heute tauchen wir in die aufregende Welt der Laravel-Autorisierung ein. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind - ich werde Ihr freundlicher Guide auf dieser Reise sein und alles Schritt für Schritt erklären. Los geht's!
Grundlagen verstehen: Authentifizierung vs. Autorisierung
Bevor wir uns den Autorisierungsfunktionen von Laravel zuwenden, klären wir eine häufige Verwechslung:
Authentifizierung: Wer bist du?
Denken Sie an die Authentifizierung als Türsteher in einem Club. Es geht darum, zu beweisen, wer du bist. In der digitalen Welt bedeutet dies normalerweise, sich mit einem Benutzernamen und einem Passwort anzumelden.
Autorisierung: Was darfst du tun?
Jetzt ist die Autorisierung wie die VIP-Liste. Sobald du im Club bist (authentifiziert), bestimmt die Autorisierung, welche Bereiche du betreten kannst. Darfst du in den VIP-Bereich gehen? Darfst du hinter die DJ-Bühne?
In Laravel authentifizieren wir zuerst Benutzer,然后 wir verwenden die Autorisierung, um zu steuern, was sie in unserer Anwendung tun können.
Autorisierungsmechanismus in Laravel
Laravel bietet ein leistungsstarkes und flexibles Autorisierungssystem. Lassen Sie uns das in verdauliche Stücke aufteilen:
1. Gates
Gates sind einfache, schließungsbezogene Wege zur Autorisierung von Aktionen. Denken Sie daran als Kontrollpunkte in Ihrer Anwendung.
So definieren Sie ein Gate:
Gate::define('edit-post', function ($user, $post) {
return $user->id === $post->user_id;
});
Dieses Gate überprüft, ob der Benutzer berechtigt ist, einen Beitrag zu bearbeiten. Es gibt true zurück, wenn die Benutzer-ID der ID des Beitragserstellers entspricht.
Um dieses Gate in Ihrem Controller zu verwenden:
if (Gate::allows('edit-post', $post)) {
// Der Benutzer kann den Beitrag bearbeiten...
}
Oder in Ihren Blade-Vorlagen:
@can('edit-post', $post)
<!-- Zeige Bearbeitungsschaltfläche -->
@endcan
2. Policies
Policies sind Klassen, die die Autorisierungslogik um ein bestimmtes Modell oder eine bestimmte Ressource organisieren. Sie sind wie spezialisierte Sicherheitsbeamte für jedes Modell in Ihrer Anwendung.
Lassen Sie uns eine Policy für unser Post-Modell erstellen:
php artisan make:policy PostPolicy --model=Post
Dieser Befehl erstellt eine PostPolicy-Klasse. Fügen wir ihm eine Methode hinzu:
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
Jetzt können Sie diese Policy in Ihrem Controller verwenden:
$this->authorize('update', $post);
Oder in Ihren Blade-Vorlagen:
@can('update', $post)
<!-- Zeige Aktualisierungsschaltfläche -->
@endcan
3. Rollen und Berechtigungen
Während Laravel keine integrierte Rollensystem bietet, können wir eines leicht implementieren. Hier ist ein einfaches Beispiel:
Zuerst fügen wir eine 'role'-Spalte zu unserer Benutzer-Tabelle hinzu:
Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('user');
});
Jetzt erstellen wir ein Gate, das administrative Berechtigungen überprüft:
Gate::define('admin', function ($user) {
return $user->role === 'admin';
});
Wir können dies in unseren Controllern oder Ansichten verwenden:
if (Gate::allows('admin')) {
// Der Benutzer ist ein Admin...
}
@can('admin')
<!-- Zeige Link zum Admin-Panel -->
@endcan
4. Middleware
Laravel ermöglicht es Ihnen auch, den Zugriff auf Ebene der Route mit Middleware zu steuern. Lassen Sie uns eine benutzerdefinierte Middleware erstellen:
php artisan make:middleware CheckRole
In der handle
-Methode dieser Middleware:
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
abort(403, 'Unberechtigtes ação.');
}
return $next($request);
}
Registrieren Sie diese Middleware in Ihrem app/Http/Kernel.php
:
protected $routeMiddleware = [
// ...
'role' => \App\Http\Middleware\CheckRole::class,
];
Jetzt können Sie es in Ihren Routen verwenden:
Route::get('/admin', function () {
//
})->middleware('role:admin');
Methodentabelle
Hier ist eine praktische Tabelle der Hauptmethoden, die wir behandelt haben:
Methode | Beschreibung | Beispiel |
---|---|---|
Gate::define() | Definiert ein neues Autorisierungsgate | Gate::define('edit-post', function ($user, $post) { ... }) |
Gate::allows() | Überprüft, ob ein Gate eine Aktion zulässt | Gate::allows('edit-post', $post) |
$this->authorize() | Autorisiert eine Aktion in einem Controller | $this->authorize('update', $post) |
@can | Blade-Direktive für Autorisierung | @can('update', $post) ... @endcan |
Gate::forUser() | Holt eine Gate-Instanz für einen bestimmten Benutzer | Gate::forUser($user)->allows('edit-post', $post) |
Denken Sie daran, dass Autorisierung darum geht, was authentifizierte Benutzer in Ihrer Anwendung tun können. Es ist ein entscheidender Bestandteil des Aufbaus sicherer und benutzerfreundlicher Webanwendungen.
Wenn Sie üben und mehr Anwendungen erstellen, werden Sie sich zunehmend mit diesen Konzepten wohler fühlen. Haben Sie keine Angst zu experimentieren - das ist, wie wir alle lernen!
Frohes Coden, zukünftige Laravel-Experten! ?????
Credits: Image by storyset