web-dev-qa-db-ja.com

laravelユーザーロールをチェックするためのルートフィルター

laravel 4で、さまざまなタイプの権限を持つユーザーがいる、RESTful APIを構築しています。ユーザーの役割(のユーザーテーブルに保存されている)に応じて、さまざまなルートへのアクセスを制限したいと思います。 db)

どうすればいいですか?これが私がこれまでに持っているものです(これは今のところ機能していません)。

filters.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');
 }

    });

「グループフィルター」の構文を間違って書いている可能性はありますか?

9
user1424508

次のことを試してください。

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

これを実装するにはさまざまな方法があります。開始の場合、ルートフィルターは引数を受け入れます。

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

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

上記は、$ valueパラメーターからアクセスできるRoute :: filterにadminを挿入します。より複雑なフィルタリングが必要な場合は、いつでもカスタムルートフィルタークラスを使用できます(フィルタークラスを確認してください): http://laravel.com/docs/routing#route-filters

コントローラ内でフィルタリングすることもできます。これにより、特定のコントローラとメソッドに基づいてフィルタリングする必要がある場合に、より適切なアプローチが提供されます。 http://laravel.com/docs/controllers#controller-filters

最後に、Sentry2のようなものを使用できます。これは、プロジェクト内で使用する完全なRBACソリューションを提供します。 https://cartalyst.com/manual/sentry

5
petkostas

laravel 5.1.11からAuthServiceProviderを使用できます: https://laravel.com/docs/5.1/authorization

0
Luca C.