Le middleware can permet de vérifier les droits d'un usager avant que la méthode d'action soit appelée.
Ex :
// 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 :
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.
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.
// 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é