web-dev-qa-db-fra.com

filtre de route laravel pour vérifier les rôles des utilisateurs

Je construis un api reposant dans laravel 4 où il existe des utilisateurs avec différents types de permission. Je veux restreindre l'accès à différents itinéraires en fonction du rôle de l'utilisateur (qui est enregistré dans la table des utilisateurs dans la base de données)

Comment je ferais ça? Voici ce que j'ai jusqu'à présent (ça ne fonctionne pas jusqu'à présent).

filtres.php

//allows backend api access depending on the user's role once they are logged in
Route::filter('role', function()
{ 
return Auth::user()->role;
}); 

routes.php

 Route::group(array('before' => 'role'), function($role) {
 if($role==1){
        Route::get('customer/retrieve/{id}', 'CustomerController@retrieve_single');
        Route::post('customer/create', 'CustomerController@create');
        Route::put('customer/update/{id}', 'CustomerController@update');
 }

    });

Est-il possible que j'écris la syntaxe incorrecte pour un "filtre de groupe"?

9
user1424508

Essayez ce qui suit:

filters.php

Route::filter('role', function()
{ 
  if ( Auth::user()->role !==1) {
     // do something
     return Redirect::to('/'); 
   }
}); 

routes.php

 Route::group(array('before' => 'role'), function() {
        Route::get('customer/retrieve/{id}', 'CustomerController@retrieve_single');
        Route::post('customer/create', 'CustomerController@create');
        Route::put('customer/update/{id}', 'CustomerController@update');


});
14
Anam

Vous pouvez implémenter cela de différentes manières. Pour commencer, les filtres de routage acceptent les arguments:

Route::filter('role', function($route, $request, $value)
{
  //
});

Route::get('someurl', array('before' => 'role:admin', function()
{
  //
}));

Ce qui précède injectera admin dans votre filtre Route ::, accessible via le paramètre $ value. Si vous avez besoin d'un filtrage plus complexe, vous pouvez toujours utiliser une classe de filtre de route personnalisée (voir Filtrer les classes de filtre): http://laravel.com/docs/routing#route-filters

Vous pouvez également filtrer dans votre contrôleur, ce qui constitue une meilleure approche lorsque vous devez filtrer en fonction de contrôleurs et de méthodes spécifiques: http://laravel.com/docs/controllers#controller-filters

Enfin, vous pouvez utiliser quelque chose comme Sentry2, qui fournit une solution RBAC complète à utiliser dans votre projet: https://cartalyst.com/manual/sentry

5
petkostas

À partir de laravel 5.1.11, vous pouvez utiliser AuthServiceProvider: https://laravel.com/docs/5.1/authorization

0
Luca C.