фильтр маршрута laravel для проверки ролей пользователей

Я создаю restful api в laravel 4, где есть пользователи с различными типами разрешений. Я хочу ограничить доступ к различным маршрутам в зависимости от роли пользователя (которая сохраняется в таблице пользователей в БД)

Как бы я это сделал? Вот что у меня есть до сих пор (пока это не работает).

фильтры.в PHP

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

маршруты.в 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');
 }

    });

возможно ли, что я пишу синтаксис неправильный для "фильтр-групп"?

3 ответов


попробуйте следующее:

фильтры.в PHP

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

маршруты.в 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');


});

есть разные способы реализовать это, для фильтров маршрута запуска принимать аргументы:

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

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

выше будет вводить admin в ваш Route:: filter, доступный через параметр $value. Если вам нужна более сложная фильтрация, вы всегда можете использовать пользовательский класс фильтра маршрута (проверьте классы фильтров): http://laravel.com/docs/routing#route-filters

вы можете также фильтровать внутри ваш регулятор, который обеспечивает более лучший подход когда вы необходимость фильтрации на основе конкретных контроллеров и методов: http://laravel.com/docs/controllers#controller-filters

наконец, вы можете использовать что-то вроде Sentry2, который предоставляет полное решение RBAC для использования в вашем проекте: https://cartalyst.com/manual/sentry


из laravel 5.1.11 вы можете использовать AuthServiceProvider:https://laravel.com/docs/5.1/authorization