2013-11-22 31 views
0

我的網站laravel-3開發使用不同的會話設置有兩個區別的部分:Laravel 3如何根據URL

  • 公共。網址是哪/
  • 管理。哪個網址是/admin

在公共部分,用戶可以登錄訪問他們的帳戶,而在管理員中,只有具有所需權限的用戶纔可以登錄。

現在我無法區分正在使用的部分與另一部分的會話,因爲兩者都使用相同的session配置參數,因此任何登錄公共部分的人都可以進入管理員區域。

我一直在思考上定義了admin部分的環境和cookiepath定義不同的值:

$environments = array(
// Local 
    'admin' => array('http://localhost*/admin'), // To handle anything inside section "admin" 
    'local' => array('http://localhost*'),  // To handle everything else 
); 

但由於Request::detect_env()只檢查與URL根這些規則,admin環境從來都不是看到(laravel/core.php:183)

$root = Request::foundation()->getRootUrl(); 
$environment = Request::detect_env($environments, $root); 

回答

1

我推薦不要對這個問題使用環境而定,而是,以便通配符過濾器委派驗證:

Route::when('admin/*', 'login_admin_filter'); 

但如果你真的想使用環境,據我所知,文檔這樣的:

在你的啓動文件,你應該使用閉包:

$env = $app->detectEnvironment(function(){ 
    // This condition need to fail if the user isn't an administrator 
    if($_SESSION['anything'] == 'admin' OR $every_thing_else){ 
     return 'admin';   
    } else { 
     return 'production'; 
}); 
+0

我想你在'login_admin_filter'內調用'Auth :: attempt()'?這使用我試圖自定義的會話參數結束。 –

+0

我在過濾器裏面驗證:'Auth :: check()'。如果失敗,我將重定向登錄表單,嘗試用try()連接用戶。難點在於區分2種登錄方式(1個admi和1個普通用戶),但我認爲這是一項基本功能。我不是Laravel的專家,但它就像我已經理解了Auth :: – Fractaliste

+0

的實現哦,在過濾器中,您應該驗證Auth :: check()是否爲true,如果他具有良好的權限(使用[Auth :: getUser ](http://laravel.com/api/source-class-Illuminate.Auth.Guard.html#502-510)),那麼你可以切換取決於個案。 – Fractaliste