2013-08-29 7 views
3

시스템에 성공적으로 로그인하고 있지만 역할이 'Administrator'인 사용자는 모든 경로에만 갈 수 있고 'Manager'역할을 가진 사용자는 'Home'으로 이동할 수 있습니다. 및 'GetDocumentDetails'이면 다른 로그인 사용자는 홈 페이지로 제한되고 게스트는 로그인 페이지로 제한됩니다. 다음과 같이 내 경로 및 필터 파일은 다음과 같습니다Laravel 4의 역할 별 로그인


경로 :

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'=>'[email protected]')); 

// 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('/'); 
}); 

답변

5

나는이 목적을 위해 Zizaco의 EntrustConfide 패키지를 사용하는 것이 좋습니다 그들은이 작업을 크게 단순화하기 때문입니다.

두 패키지를 모두 설치 한 후이 페이지의 자습서를 따르십시오. 그런 다음 Route Permission 필터 또는 일반 Route 필터를 정의하여 특정 경로에 대한 액세스를 제한 할 수 있습니다. 컨트롤러 동작에서 추가 로직이 필요 없습니다.

이 루트 권한 필터는 쉽게 다음과 같이 정의 할 수 있습니다 : 권한에 따라

// 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 설명서를 참조하십시오. 엔트러스트는 정말 다목적입니다. 주어진 링크에서

+0

는 실행을 합성기 업데이트 명령 $ 작곡가 업데이트 어떻게 내가 그것을 실행을 썼다는? 명령 프롬프트에서이 글을 썼는데 '인식 할 수없는 프로그램'이라고 표시했습니다 – Navya

+0

Laravel 4를 설치했다면 아마도 Composer를 통해 그렇게했을 것입니다. Laravel 루트 폴더 ('composer.json'라는 파일이있는 폴더)로 이동하여 "php path/to/composer.phar update"명령을 실행하십시오. – ciruvan

+0

명령 프롬프트에서 작성 중일 때 php artisan entrust : migration 그런 다음 오류가 발생합니다. 'Zizaco \ Entrust \ EntrustFacade'파일을 찾을 수 없습니다. config/app.php의 프로 바이더와 앨리어스 배열에 행을 추가했습니다. – Navya