Laravel - Authorization: A Beginner's Guide

Salut à toi, futurs développeurs Laravel ! Aujourd'hui, nous plongeons dans le monde passionnant de l'autorisation Laravel. Ne t'inquiète pas si tu es nouveau dans le monde de la programmation - je vais être ton guide amical à travers ce périple, en expliquant tout pas à pas. C'est parti !

Laravel - Authorization

Comprendre les bases : Authentification vs Autorisation

Avant de nous plonger dans les fonctionnalités d'autorisation de Laravel, clarifions une confusion courante :

Authentification : Qui es-tu ?

Pense à l'authentification comme au gardien d'un club. Il s'agit de prouver qui tu es. Dans le monde numérique, cela signifie généralement se connecter avec un nom d'utilisateur et un mot de passe.

Autorisation : Que peux-tu faire ?

Maintenant, l'autorisation est comme la liste VIP. Une fois que tu es dans le club (authentifié), l'autorisation détermine les zones auxquelles tu peux accéder. Peux-tu aller dans le salon VIP ? Es-tu autorisé à être derrière le pupitre du DJ ?

Dans Laravel, nous authentifions d'abord les utilisateurs, puis nous utilisons l'autorisation pour contrôler ce qu'ils peuvent faire dans notre application.

Mécanisme d'Autorisation dans Laravel

Laravel fournit un système d'autorisation puissant et flexible. Decomposons-le en parties digérables :

1. Gates

Les Gates sont des moyens simples basés sur des fermetures pour autoriser des actions. Pense à eux comme des points de contrôle dans ton application.

Voici comment tu définis un gate :

Gate::define('edit-post', function ($user, $post) {
return $user->id === $post->user_id;
});

Ce gate vérifie si l'utilisateur est autorisé à modifier un article. Il renvoie true si l'ID de l'utilisateur correspond à l'ID de l'auteur de l'article.

Pour utiliser ce gate dans ton contrôleur :

if (Gate::allows('edit-post', $post)) {
// L'utilisateur peut modifier l'article...
}

Ou dans tes templates Blade :

@can('edit-post', $post)
<!-- Affiche le bouton de modification -->
@endcan

2. Policies

Les Policies sont des classes qui organisent la logique d'autorisation autour d'un modèle ou d'une ressource particular. Elles sont comme des gardes de sécurité spécialisés pour chaque modèle dans ton application.

Créons une policy pour notre modèle Post :

php artisan make:policy PostPolicy --model=Post

Cette commande crée une classe PostPolicy. Ajoutons-lui une méthode :

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

Maintenant, tu peux utiliser cette policy dans ton contrôleur :

$this->authorize('update', $post);

Ou dans tes templates Blade :

@can('update', $post)
<!-- Affiche le bouton de mise à jour -->
@endcan

3. Rôles et Permissions

Bien que Laravel ne fournisse pas un système de rôle intégré, nous pouvons facilement en implémenter un. Voici un exemple simple :

Tout d'abord, ajoutons une colonne 'role' à notre table users :

Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('user');
});

Maintenant, créons un gate qui vérifie les privilèges administratifs :

Gate::define('admin', function ($user) {
return $user->role === 'admin';
});

Nous pouvons utiliser cela dans nos contrôleurs ou vues :

if (Gate::allows('admin')) {
// L'utilisateur est un administrateur...
}
@can('admin')
<!-- Affiche le lien du panneau d'admin -->
@endcan

4. Middleware

Laravel te permet également de contrôler l'accès au niveau des routes en utilisant des middleware. Créons un middleware personnalisé :

php artisan make:middleware CheckRole

Dans la méthode handle de ce middleware :

public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
abort(403, 'Action non autorisée.');
}

return $next($request);
}

Enregistre ce middleware dans ton app/Http/Kernel.php :

protected $routeMiddleware = [
// ...
'role' => \App\Http\Middleware\CheckRole::class,
];

Maintenant, tu peux l'utiliser dans tes routes :

Route::get('/admin', function () {
//
})->middleware('role:admin');

Tableau des Méthodes

Voici un tableau pratique des principales méthodes que nous avons couvertes :

Méthode Description Exemple
Gate::define() Définit une nouvelle autorisation gate Gate::define('edit-post', function ($user, $post) { ... })
Gate::allows() Vérifie si un gate autorise une action Gate::allows('edit-post', $post)
$this->authorize() Autorise une action dans un contrôleur $this->authorize('update', $post)
@can Directive Blade pour l'autorisation @can('update', $post) ... @endcan
Gate::forUser() Obtient une instance de gate pour un utilisateur spécifique Gate::forUser($user)->allows('edit-post', $post)

Souviens-toi, l'autorisation consiste à contrôler ce que les utilisateurs authentifiés peuvent faire dans ton application. C'est une partie essentielle de la construction de web applications sécurisées et conviviales.

En pratiquant et en développant plus d'applications, tu seras de plus en plus à l'aise avec ces concepts. N'aie pas peur d'expérimenter - c'est ainsi que nous apprenons tous !

Bonne programmation, futurs experts Laravel ! ??‍??‍?

Credits: Image by storyset