【问题标题】:Multiple auth for laravellaravel 的多重身份验证
【发布时间】:2018-02-08 02:31:12
【问题描述】:

我想将中间件身份验证拆分为两个角色,一个是管理员,第二个是用户 但是有些路由适用于所有用户和管理员,很少有路由仅适用于管理员我如何与路由分开?

Auth::routes();
Route::group(['middleware' => 'auth'], function () {        
     //Some route here 
});

Route::group(['middleware' => ['guest']], function () {
   //some route here
});

【问题讨论】:

标签: php laravel laravel-5.3


【解决方案1】:

这是我对管理员和用户(在我的情况下为代理)进行访问控制的实现。我的用户表 (is_admin) 中有一个布尔字段,普通用户为 0,管理员为 1。

在您的用户模型中添加:

protected $casts = [
    'is_admin' => 'boolean',
];

public function isAdmin()
{
    return $this->is_admin;
}

为管理员和代理创建新的中间件:

php artisan make:middleware Admin

php artisan make:middleware Agent

中间件文件将创建在App\Http\Middleware\

将此添加到Admin.php内的类中:

public function handle($request, Closure $next)
{
    if ( Auth::check() && Auth::user()->isAdmin() )
    {
        return $next($request);
    }
    return redirect('/agent');
}

将此添加到Agent.php

public function handle($request, Closure $next)
{    
    if ( Auth::check() && !Auth::user()->isAdmin() )
    {
        return $next($request);
    }    
    return redirect('/home');
}

在此之后注册您的中间件 使用 laravel 将其添加到位于 app\Http\Kernel.phpKernel.php 中的 protected $routeMiddleware

'admin' => 'App\Http\Middleware\Admin',
'agent' => 'App\Http\Middleware\Agent',

确保创建正确的重定向路由,正如我们在中间件文件中提到的那样。在这之后你几乎完成了。现在要验证用户是管理员还是普通用户,请将其添加到控制器的构造方法中。

只允许管理员用户操作:

    public function __construct()
{   

    $this->middleware('auth');
    $this->middleware('admin');
}

仅允许普通(代理)用户执行的操作:

public function __construct() {

$this->middleware('auth');
$this->middleware('agent');

}

或者您也可以在路由中添加中间件,

Route::group(['middleware' => 'admin'], function () {        
     //Some route here 
});

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2018-10-17
    • 2019-05-14
    • 2015-08-21
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多