2013-08-05 37 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'); 
    } 
}); 

和我的View Composer(它在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'); 
    } 
}); 

所以這是行不通的。我想用我的管理員帳戶訪問一些頁面(角色等於5,數據庫中的'角色'列)。我在我的路線中創建了一個組,但是當我嘗試訪問一個頁面時,它會將我重定向到我的新聞/索引頁面。

我該如何設置它使任何頁面需要管理角色可見?

我還使用Jeffrey Way的發生器製作腳手架,如果有幫助的話。

回答

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); 

}); 

作曲家被用來傳遞同一組數據或執行同一組任務的一組的意見。

我相信這會把你排除在外;)