2015-12-02 38 views
1

所以我必須有一個登錄表面,登錄後我必須決定哪個管理表面可供用戶使用。Laravel管理員使用過濾器之前和之後的訪問級別登錄?

所以我設置路由的是,纔可以進入管理頁面,他們需要登錄,他們在他們將被重定向到相應的管理頁面登錄後:

Route::get('admin', array('before' => 'auth', 'after' => 'access_lvl')); 
Route::get('admin1', array('before' => 'auth', 'as'=>"admin1", 'uses' => '[email protected]')); 
Route::get('admin2', array('before' => 'auth', 'as'=>"admin2", 'uses' => '[email protected]')); 
Route::get('admin3', array('before' => 'auth', 'as'=>"admin3", 'uses' => '[email protected]')); 

這裏是access_lvl過濾:

Route::filter('access_lvl',function(){ 
    $access_lvl=Auth::user()->access_lvl; 
    var_dump($access_lvl); 
    switch($access_lvl){ 
    case 1: return Redirect::to('admin1/'); break; 
    case 2: return Redirect::to('admin2/'); break; 
    case 3: return Redirect::to('admin3/'); break; 
    default: return Redirect::to('admin3/'); break; 
    }; 
}); 

不幸的是,我得到一個試圖在Chrome中得到Auth::user()->access_lvl;非對象錯誤的財產,沒有錯誤只是一個INT(1)在Firefox響應。你能幫我解決這個問題嗎?我在哪裏犯錯誤?這是之前,邏輯正確之後?或者我應該在其他地方添加after過濾器?

另外我正在使用Laravel3我認爲。我剛剛得到了這個項目,我必須繼續。

+0

你可能沒有登錄在Chrome所以'驗證::用戶()'不會返回一個對象。在Firefox中,您已登錄,但'var_dump($ access_level)'向瀏覽器發送響應,從而防止重定向工作,因爲數據發送後無法發送標頭。 –

+0

@Swinburne,但你認爲邏輯正確嗎? – godzsa

+0

我想這不會工作,如果當我從Firefox註銷它不會登錄回來,我會得到相同的錯誤,因爲在鉻 – godzsa

回答

0

所以我有一個解決方案:

auth過濾器將您重定向到login表面如果Auth::guest()是真實的,所以它可以通過switch聲明這樣您重定向到相應的管理頁面:

Route::filter('auth', function() 
{ 
    if (Auth::guest()) return Redirect::to('admin/login'); 
    $access_lvl=Auth::user()->access_lvl; 
    switch($access_lvl){ 
     case 1: return Redirect::to('admin1/'); break; 
     case 2: return Redirect::to('admin2/'); break; 
     case 3: return Redirect::to('admin3/'); break; 
     default: return Redirect::to('admin3/'); break; 
    }; 
}); 

這意味着你不必有一個單獨的access_lvl過濾

雖然這是一個解決方案,我仍然甲肝e問題:

在原始情況下after過濾器的探頭是什麼? 什麼時候應該使用after過濾器?

+1

將響應發送到瀏覽器後發生。重定向函數使用'header('Location:admin1 /');'但在發送響應之後無法發送標題。請參閱[標題手冊頁](http://php.net/manual/en/function.header.php) –

-1

您應該使用Laravel Middleware

這是如何避免switch() {case:}在你的路由

+0

OP使用的Laravel 3(或可能是4)沒有中間件堆棧。 –

相關問題