Autorisation Laravel : Gates, Policies et directives Blade pour controler l'acces

Guide complet sur l'autorisation Laravel : Gates, Policies, directives Blade @can/@cannot et protection des ressources de votre application.

Mahmoud DEVO
Mahmoud DEVO
December 28, 2025 2 min read
Autorisation Laravel : Gates, Policies et directives Blade pour controler l'acces
Table of Contents

Gestion de l’autorisation dans Laravel : Une approche structurée

Laravel propose une gestion de l’autorisation robuste et flexible qui peut être utilisée pour protéger les ressources de votre application. Dans cet article, nous allons explorer en détail la manière dont vous pouvez utiliser les méthodes d’autorisation de Laravel pour contrôler l’accès à vos ressources.

Méthodes d’autorisation

Laravel fournit plusieurs méthodes d’autorisation que vous pouvez utiliser pour contrôler l’accès à vos ressources. Voici quelques-unes des méthodes les plus courantes :

  • authorizeResource(Contact::class): Autorise l’accès aux ressources de type Contact.
  • authorize('view', Contact::class): Autorise la vue d’une ressource de type Contact.
  • authorize('create', Contact::class): Autorise la création d’une nouvelle ressource de type Contact.

Voici un exemple de comment utiliser ces méthodes dans votre contrôleur :

use Illuminate\Support\Facades\Gate;

public function index()
{
    Gate::authorizeResource(Contact::class);
}

public function create()
{
    Gate::authorize('create', Contact::class);
}

Vérification de l’utilisateur

Si vous n’êtes pas dans un contrôleur, vous pourriez avoir besoin de vérifier les capacités d’un utilisateur spécifique. Pour cela, vous pouvez utiliser la méthode Gate::forUser($user)->check($ability) :

$user = User::find(1);
if (Gate::forUser($user)->check('create-contact')) {
    // Faites quelque chose
}

Directives Blade

Laravel fournit également des directives Blade pour vérifier les capacités d’un utilisateur :

  • @can('ability', $instance): Vérifie si l’utilisateur a la capacité à faire quelque chose avec une instance spécifique.
  • @cannot('ability', $instance): Vérifie si l’utilisateur n’a pas la capacité à faire quelque chose avec une instance spécifique.

Voici un exemple de comment utiliser ces directives :

<nav>
    <a href="/">Accueil</a>
    @can('edit-contact', $contact)
        <a href="{{ route('contacts.edit', [$contact->id]) }}">Éditer ce contact</a>
    @endcan
</nav>

Policies

Les policies sont des classes qui organisent les règles d’autorisation pour un type de ressource spécifique. Vous pouvez générer une politique en utilisant l’Artisan :

php artisan make:policy ContactPolicy

La police doit ensuite être registrée dans le fournisseur d’application :

protected $policies = [
    Contact::class => ContactPolicy::class,
];

Voici un exemple de politique qui autorise la mise à jour d’une ressource de type Contact si l’utilisateur est le propriétaire de la ressource :

namespace App\Policies;

use Illuminate\Auth\Access\HandlesAuthorization;
use App\Models\Contact;

class ContactPolicy
{
    use HandlesAuthorization;

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

Vérification de politique

Vous pouvez vérifier si une politique est définie pour un type de ressource spécifique en utilisant la méthode Gate::check($ability) :

if (Gate::check('update', Contact::class)) {
    // Faites quelque chose
}

Surcharge de policies

Vous pouvez surcharger les règles d’autorisation définies dans une politique en utilisant le before() méthode. Voici un exemple de comment surcharger la politique ContactPolicy pour autoriser la mise à jour d’une ressource de type Contact même si l’utilisateur n’est pas le propriétaire :

Gate::before(function ($user, $ability) {
    if ($user->isOwner()) {
        return true;
    }
});

En résumé, Laravel fournit une gestion de l’autorisation robuste et flexible qui peut être utilisée pour protéger les ressources de votre application. Les méthodes d’autorisation, les directives Blade, les policies et la surcharge de policies sont quelques-unes des fonctionnalités clés que vous pouvez utiliser pour contrôler l’accès à vos ressources.

Nous espérons que cet article a été utile pour vous. Si vous avez des questions ou besoin de plus d’informations, n’hésitez pas à nous contacter.

Advertisement

In-Article Ad

Dev Mode

Share this article

Mahmoud DEVO

Mahmoud DEVO

Senior Full-Stack Developer

I'm a passionate full-stack developer with 10+ years of experience building scalable web applications. I write about Vue.js, Node.js, PostgreSQL, and modern DevOps practices.

Enjoyed this article?

Subscribe to get more tech content delivered to your inbox.

Related Articles