3

システムに正常にログインしていますが、ロールが「管理者」であるユーザーのみがすべてのルートにアクセスでき、ロールが「マネージャー」であるユーザーは「ホーム」および「GetDocumentDetails」に移動できるようにする必要があります。ホームページに制限され、ゲストはログイン ページに制限されます。私のルートファイルとフィルターファイルは次のとおりです。


ルート:

Route::post('/login', function()
{
    $user = array(
    'username' => Input::get('username'),
    'password' => Input::get('password'));
    // verify user credentials  
    if (Auth::attempt($user,true))
    {   
        $role= Auth::user()->userrole;
        return Redirect::route('home');
    }
}
// Route for getting document details using get method
Route::get('GetDocumentDetailsById',array('as'=>'GetDocumentDetailsById','uses'=>'DocumentController@GetDocumentDetailsById'));

// Route for guest user 
Route::filter('guest', function()
{
    if (Auth::check()) 
    return Redirect::route('home')->with('flash_notice', 'You are already logged in!');
    // Redirect Log-in user to his home page
});

フィルター:

/* Filter to redirect guest user to login page */
Route::filter('auth', function()
{
    $role=Auth::user();
    if (Auth::guest()) return Redirect::guest('login');
});


Route::filter('auth.basic', function()
{
    return Auth::basic('username');
});

Route::filter('guest', function()
{
    if (Auth::check()) return Redirect::to('/');
});
4

1 に答える 1

5

この目的には、Zizaco のEntrustおよびConfideパッケージを使用することをお勧めします。

両方のパッケージをインストールした後、これらのページのチュートリアルに従ってください。ルート許可フィルターまたは通常のルート フィルターを定義するだけで、特定のルートへのアクセスを制限できます。コントローラー アクションに追加のロジックは必要ありません。

これらのルート許可フィルターは、次のように簡単に定義できます。

// Any route under admin is only accessible by users with role Admin.
// Redirect happens if user doesn't have this role.

Entrust::routeNeedsRole('admin*', 'Admin', Redirect::to('/'));

アクセス許可に基づくルート フィルターは次のようになります。

Route::filter('myFilter', function()
{
    if (!Entrust::can('get_document_details') )
    {
        return Redirect::to('/');
    }
});

このフィルターは、任意のルートに適用できます。その他の例と機能については、Entrust のドキュメントを参照してください。Entrust は本当に用途が広いです。

于 2013-08-29T08:32:30.203 に答える