繁体   English   中英

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

[英]Multiple auth in middleware. 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',
    ],
],

我在路由文件中使用了这个

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

您可以创建一个中间件来检查用户是否具有一定的权限。 这是我习惯的方式。

我创建了一个中间件,例如说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');
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM