2017-05-26 75 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'); 
} 

注:在上面的例子中我有与用户的关系的角色表表。