2017-05-26 44 views
0

即時通訊PHP和Laravel中的新功能。我嘗試在網上搜索,但我無法爲我的問題得到正確的答案。我希望我的特定頁面只能由已通過身份驗證的管理員和用戶訪問。所以基本上,所有用戶都需要先登錄。繼承人我的代碼。提前致謝。中間件中的多重驗證。 Laravel 5.4

HomeController.php

class HomeController extends Controller 
{ 
    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('auth:web, auth:admin'); 
    } 

    /** 
    * Show the application dashboard. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     return view('accounts.user.user_dashboard'); 
    } 
} 

auth.php

'guards' => [ 
    'web' => [ 
     'driver' => 'session', 
     'provider' => 'users', 
    ], 

    'api' => [ 
     'driver' => 'token', 
     'provider' => 'users', 
    ], 
    'admin' => [ 
     'driver' => 'session', 
     'provider' => 'admins', 
    ], 
    'admin-api' => [ 
     'driver' => 'token', 
     'provider' => 'admins', 
    ], 
], 
+0

爲了您的需求,您只需創建一個路由中間件來檢查用戶的角色,無論角色是普通用戶還是管理員用戶。您可以使用網絡中間件或管理中間件。管理角色用戶可以自動訪問普通網頁。你不需要放置多箇中間件。最好的方法是在不在控制器構造函數上的路由上使用。 – webDev

+0

通過定義一個路由中間件來自己嘗試檢查用戶表中的用戶角色。做簡單的方式不是你的方式......如果你不能找出使用路由中間件,那麼我會發布解決方案。 – webDev

回答

0

我用這個,在路由文件

Route::group(['middleware' => ['auth']], function(){ 
    Route::get('/dashboard', '[email protected]'); 
} 
+0

管理員角色定義在哪裏? – webDev

0

您可以創建一箇中間件檢查用戶有一定的權限使命與否。這是我習慣的做法。

我創建了一箇中間件,例如SuperAccess,併爲我的超級管理員編寫邏輯。

class SuperAccess 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    $response = $next($request); 
    if(Auth::check() && Auth::user()->role->permission == 1000){ 
     return redirect('web/dashboard'); 
    } 
    return $response; 
} 
} 

然後我用中間件,我需要有superAccess檢查例如在DeviceController說

class DevicesController extends Controller 
{ 
public function __construct(){ 
    $this->middleware('auth'); 
    $this->middleware('super'); 
} 

注:在上面的例子中我有與用戶的關係的角色表表。