中间件中的多个身份验证。 Laravel 5.4

时间:2017-05-26 06:49:05

标签: php laravel-5.4

我是PHP和Laravel的新手。我尝试在线搜索,但我无法为我的问题找到正确的答案。我希望我的特定页面只能由已经过身份验证的管理员和用户访问。基本上,所有用户都需要先登录。继承我的代码。提前谢谢。

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',
    ],
],

2 个答案:

答案 0 :(得分:0)

我在路线档案中使用了这个

Route::group(['middleware' => ['auth']], function (){
     Route::get('/dashboard', 'HomeController@index'); 
}

答案 1 :(得分: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');
}

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