Formation PUB030 : Laravel, 2019 Les droits (authorization)

41.3 Vérifier des droits directement dans une route


Le middleware can permet de vérifier les droits d'un usager avant que la méthode d'action soit appelée.

Ex :

Fichier routes\web.php

// ne pas mettre d'espaces dans le 'can:create,App\Produit'
Route::get('produits/creation', [
    'as' => 'produits.create',
    'uses' => 'ProduitsController@create',
])->middleware('can:create,App\Produit');

Dans le cas où le droit doit être vérifié pour un produit en particulier comme c'est souvent le cas lors d'une modification, on devra utiliser l'injection de modèle :

Fichier routes\web.php

Route::get('produits/{produit}/modification', [
    'as' => 'produits.edit',
    'uses' => 'ProduitsController@edit',
])->middleware('can:edit,produit');

Remarquez que pour vérifier si l'usager est autorisé à effectuer une action sur une instance donnée d'un modèle (par exemple sur un produit donné), il faut que la route reçoive cette instance en paramètre pour que le middleware y ait accès.

Groupe de routes avec un middleware

Il est intéressant d'utiliser le middleware can pour réserver un groupe de routes aux développeurs de l'application afin qu'ils puissent y effectuer différents tests.

Dans cet exemples, les politiques de droits sont associées au modèle Page et les méthodes d'action sont codées dans PagesController mais on aurait pu utiliser toute autre chose.

Fichier routes\web.php

// tests pour le développement : réservé aux développeurs
// attention : si tente d'accéder à ces routes alors que pas logué, affiche page d'erreur 500
Route::middleware('can:dev,App\Page')->group(function () {

    Route::get('test', [

        'as' => 'pages.test',

        'uses' => 'PagesController@test',

    ]);

    Route::get('testplantage', [

        'as' => 'pages.testPlantage',

        'uses' => 'PagesController@testPlantage',

    ]);

});

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre