2017-05-07 156 views
-2

所以我試圖實現某些東西,這似乎是不可能的。我希望在我的應用程序中使用不同的控制器來根據用戶角色使用一些路由這是我正在嘗試的方法,但效果不佳。用戶線路工作,但管理的路線返回,並試圖讓非對象錯誤屬性在VerifyCsrfToken.php文件*laravel基於用戶角色的多個控制器的路由

Route::group(array('middleware' => 'isAdmin'), function() { 
    Route::get('/', 'Admin\[email protected]'); 
}); 

Route::group(array('middleware' => 'isUser'), function() { 
    Route::get('/', 'User\[email protected]'); 
}); 

我中間件

public function handle($request, Closure $next) 
{ 
    if(Auth::user()->isAdmin()) { 
     return $next($request); 
    } 
} 

public function handle($request, Closure $next) 
{ 
    if(Auth::user()->isUser()) { 
     return $next($request); 
    } 
} 

我已經看到了一些處理這種的情況下,僅通過處理這在控制器甚至檢查線路文件中使用的角色,但我寧願使用middlwares,所以我的路線文件將是清潔

+0

錯誤消息可能與顯示的代碼無關。 –

回答

0

你可以做這樣的事情:

Route::get('/', function() { 
    if (auth()->check()) { 
     if (auth()->user()->isAdmin()) { 
      return redirect()->route(''); 
     } elseif (auth()->user()->isUser()) { 
      return redirect()->route(); 
     } else { 
      return view('index'); 
     } 
    } 
    return redirect()->to('login'); 
}); 
0

錯誤信息可能與您的節目代碼無關。

但是在一條路線上使用多個控制器是不可能的,我曾經問過同樣的問題。

但是,您可以只使用一個控制器並處理該控制器中的授權。

例如:

public function getIndex() 
{ 
    if(Auth::user()->isAdmin()) { 
     //Admin 
     return $this->getAdminIndex(); 
    } else { 
     //No admin 
     return $this->getUserIndex(); 
    } 
} 

protected function getAdminIndex() 
{ 
    return view('admin.index'); 
} 

protected function getUserIndex() 
{ 
    return view('user.index'); 
} 

但要做到這一點是最乾淨的方式,只是有兩條路線。