Différence entre authentification et autorisation
L’authentification vérifie « qui » est l’utilisateur (par exemple via la connexion). L’autorisation décide « ce qu’il peut faire » : n’éditer que ses propres publications, seuls les administrateurs modifient les paramètres, etc. Après avoir implémenté la connexion via l’authentification, l’étape suivante est l’autorisation.Laravel propose deux approches d’autorisation : les Gates et les Policies. Le choix dépend de votre cas d’usage.
Gates
Les Gates sont des vérifications d’autorisation simples basées sur des closures. Idéales pour les jugements non liés à un modèle particulier.Flux d’autorisation via Gate
Définir une Gate
Définissez la Gate dans la méthodeboot de App\Providers\AppServiceProvider via Gate::define().
Contrôler la permission
Dans un contrôleur, utilisezGate::allows() ou Gate::denies().
Gate::authorize() pour lever une exception
Pour retourner automatiquement une réponse 403 en cas d’échec, utilisez Gate::authorize() (pas besoin d’écrire abort(403)).
Bypass administrateur (before)
Pour donner tous les droits aux administrateurs, utilisez Gate::before().
before retourne une valeur non nulle, cette valeur devient le résultat. Si elle retourne null (ou rien), le contrôle normal se poursuit.
@can / @cannot dans Blade
Dans les templates, les directives @can et @cannot sont pratiques.
Policies
Une Policy regroupe la logique d’autorisation d’un modèle particulier dans une classe. Pour gérer les droits CRUD surPost, les Policies conviennent mieux que les Gates.
Flux d’autorisation via Policy
Générer une Policy
Utilisezmake:policy.
--model.
app/Policies/PostPolicy.php est créé.
Détection automatique modèle / policy
Par défaut, Laravel détecte la Policy selon la convention de nommage.- Modèle :
app/Models/Post.php - Policy :
app/Policies/PostPolicy.php
Sinon, ou pour enregistrer manuellement, utilisez Sous Laravel 13, vous pouvez aussi utiliser l’attribut
Gate::policy() dans AppServiceProvider::boot.#[UsePolicy].Implémenter les méthodes
Une Policy générée avec--model contient les méthodes CRUD standard.
Bypass administrateur (before)
Les Policies acceptent aussi une méthode before.
Ordre d’exécution du callback before
Utiliser une Policy dans un contrôleur
Méthode authorize()
Le contrôleur de base Laravel expose authorize() (utilisez Gate::authorize() sinon).
- User::can() / cannot()
authorizeResource() pour un contrôleur RESTful
authorizeResource() associe automatiquement chaque action du contrôleur à la méthode correspondante de la Policy.
Autorisation via middleware
Pour vérifier au niveau de la route, utilisez le middlewarecan.
can :
Utiliser une Policy dans Blade
Une fois la Policy enregistrée,@can / @cannot l’utilisent automatiquement.
Exemple : gestion des droits d’un blog
Exemple d’application blog où « seul l’auteur peut modifier/supprimer sa publication ».1
Générer la Policy
2
Implémenter les méthodes
3
Ajouter `authorizeResource()` au contrôleur
4
Contrôle des droits dans Blade
Récapitulatif
Choix entre Gate et Policy
Choix entre Gate et Policy
- Gate : jugements simples non liés à un modèle (accès au dashboard admin, droit global de configuration).
- Policy : gestion CRUD sur un modèle (
Post,Order,Comment, etc.).
APIs fréquentes
APIs fréquentes
Commandes Artisan utiles
Commandes Artisan utiles