Skip to main content

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.
Guide de choix

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éthode boot de App\Providers\AppServiceProvider via Gate::define().
La closure reçoit toujours l’utilisateur authentifié en premier argument, puis le modèle ou d’autres informations.

Contrôler la permission

Dans un contrôleur, utilisez Gate::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)).
Gate::authorize() lève Illuminate\Auth\Access\AuthorizationException en cas de refus, que Laravel convertit automatiquement en 403.

Bypass administrateur (before)

Pour donner tous les droits aux administrateurs, utilisez Gate::before().
Si la closure 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 sur Post, les Policies conviennent mieux que les Gates.

Flux d’autorisation via Policy

Générer une Policy

Utilisez make:policy.
Pour générer les méthodes CRUD standard, utilisez --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
Aucun enregistrement manuel n’est nécessaire si vous respectez la convention.
Sinon, ou pour enregistrer manuellement, utilisez Gate::policy() dans AppServiceProvider::boot.
Sous Laravel 13, vous pouvez aussi utiliser l’attribut #[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.
before n’est appelé que si la méthode correspondante existe dans la Policy. Sans méthode update, before n’est pas appelé non plus.

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).

authorizeResource() pour un contrôleur RESTful

authorizeResource() associe automatiquement chaque action du contrôleur à la méthode correspondante de la Policy.
Correspondance :
authorizeResource() évite d’appeler authorize() dans chaque action. Idéal avec les contrôleurs de ressource REST.

Autorisation via middleware

Pour vérifier au niveau de la route, utilisez le middleware can.
Version plus concise avec la méthode 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

  • 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.).
Dernière modification le 13 juillet 2026