2013-08-05 6 views
0

필터 및보기 작곡가를 직접 만들었습니다.Laravel 4 필터 및보기 작곡가

내 관리자 필터 :

Route::filter('admin', function() 
{ 
    if (Auth::check()) 
    { 
     $roles = Auth::user()->role; 

     if ($roles == '5') 
     { 
      return Redirect::to('news/index')->with('roles', $roles); 
     } 
    } 
    else 
    { 
     return View::make('errors.401'); 
    } 
}); 

내보기 작곡가가 (이 global.php에서의) :

// View composer 
View::composer(array('common.menu_addition','common.base_errors'), function($view) 
{ 
    if (Auth::check()) 
    { 
     $roles = Auth::user()->type; 
     if ($roles == '5') 
     { 
      $view->with('roles', $roles); 
     } 
     else 
     { 
      $view; 
     } 
    } 
    else 
    { 
     return Redirect::to('news/index'); 
    } 
}); 

그래서 작동하지 않습니다 모두 여기의 첫 번째는 코드입니다. 내 admin 계정으로 일부 페이지에 액세스하려고합니다 (역할이 5, 데이터베이스에서 'role'역할). 내 경로에서 그룹을 만들었지 만 페이지에 액세스하려고하면 내 뉴스/색인 페이지로 리디렉션됩니다.

관리 역할을 볼 수있는 페이지를 만들 수 있도록 설정하려면 어떻게해야합니까?

제프리 웨이의 발전기를 사용하여 비계를 만들었습니다. 도움이된다면.

답변

2

나는 응용 프로그램에서 매우 유사한 것을하지만, 몇 번의 시행 착오 끝에 사용자와 관리자를 인증하는 가장 좋은 방법은 두 개의 개별 필터를 사용하는 것이라고 생각했습니다.

내가 단지에서 사용자를 기록 auth 필터가 -

Route::filter('auth', function() { 
    if (Auth::guest()) return Redirect::to('login'); 
}); 

이 외에도, 나는 사용자 역할에 로그인 한 확인하는 auth.admin 필터가 : 그래서, 여기에 내가 할 것입니다 : 기억해야 할

Route::filter('auth.admin', function() { 
    if(Auth::user()->userprofile->security_level < 4) { 
     return Redirect::route('projects.home'); 
    } 
}); 

하나주의해야 할 점은 당신의 경로에서 auth.admin 필터, 독립을 사용하지 않는 것입니다. 사용자가 로그인되지 않는 오류가 발생합니다 당신은 같은 것을 수행 할 수 있습니다.이 설정으로

Route::group(array('before' => 'auth'), function() { 
    Route::get('user', array('as' => 'user.home', 'uses' => '[email protected]'));}); 
} 

Route::group(array('before' => 'auth|auth.admin'), function() { 
    Route::get('user/create', array('as' => 'user.create', 'uses' => '[email protected]')); 
}); 

을, 당신은 단지 당신의 관리자가 authauth.admin와 후자의 라우팅 그룹에 액세스하려는 페이지를 추가합니다.

이제이 설정으로 작곡가에서 논리를 확인할 필요가 없습니다. 라우팅 (또는 인수가 무엇인지에 따라 컨트롤러)이 라우팅 논리를 처리해야하는 것이 이상적입니다.

이처럼 작곡가를 다시 작성할 수 있습니다 :

View::composer(array('common.menu_addition','common.base_errors'), function($view) { 

    // get all categories using the category model 
    $categories = Category::all(); 
    $view->with('categories', $categories); 

}); 

작곡자는 동일한 데이터 세트를 전달 또는 뷰의 집합에 대한 작업의 동일한 집합을 수행하는 데 사용됩니다.

나는 이것이 당신을 정렬 할 것이라고 확신합니다.)