10

我正在 laravel 4 中构建一个宁静的 api,其中有具有不同类型权限的用户。我想根据用户角色限制对不同路由的访问(保存在数据库的用户表中)

我该怎么做?这是我到目前为止所拥有的(到目前为止还没有工作)。

过滤器.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');
 }

    });

是否有可能我为“组过滤器”编写了错误的语法?

4

3 回答 3

14

尝试以下操作:

过滤器.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');


});
于 2013-12-27T03:35:42.290 回答
5

有不同的方法可以实现这一点,因为开始 Route 过滤器接受参数:

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

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

以上将在您的 Route::filter 中注入 admin,可通过 $value 参数访问。如果您需要更复杂的过滤,您可以随时使用自定义路由过滤器类(检查过滤器类): http: //laravel.com/docs/routing#route-filters

您还可以在控制器中进行过滤,当您需要基于特定控制器和方法进行过滤时,这提供了一种更好的方法:http: //laravel.com/docs/controllers#controller-filters

最后,您可以使用 Sentry2 之类的东西,它提供了一个完整的 RBAC 解决方案以在您的项目中使用: https ://cartalyst.com/manual/sentry

于 2013-12-27T13:27:10.883 回答
0

从 laravel 5.1.11 开始,您可以使用 AuthServiceProvider:https ://laravel.com/docs/5.1/authorization

于 2016-03-07T10:07:16.913 回答