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"?
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');
});
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
À partir de laravel 5.1.11, vous pouvez utiliser AuthServiceProvider: https://laravel.com/docs/5.1/authorization