Laravel 5中的多个身份验证用户类型


Multiple auth user types in Laravel 5

如何将auth用户组分为3个组,我需要管理员、客户端和工作组。

以下是我的授权用户路线:

Route::group(['middleware' => 'auth'], function(){
    Route::get('home', array(
        'as' => 'home',
        'uses'  => 'HomeController@index'
        ));

    Route::get('logout', array(
       'as' => 'logout',
       'uses' => 'UserController@logout'
    ));

});

我已经编写了一个中间件,可以进行基本的基于角色的身份验证,正如您所描述的那样。

Route::get('home', [
     'middleware' => ['auth', 'roles'], //use the roles middleware
     'uses' => 'HomeController@index',
     'roles' => ['admin', 'client'] // only admin and client roles are allowed
]);

说明书

在App''Http''Middleware中,创建一个名为"CheckRole.php"的文件

<?php namespace App'Http'Middleware;
// First copy this file into your middleware directoy
use Closure;
class CheckRole{
/**
* Handle an incoming request.
*
* @param 'Illuminate'Http'Request $request
* @param 'Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
    // Get the required roles from the route
    $roles = $this->getRequiredRoleForRoute($request->route());
    // Check if a role is required for the route, and
    // if so, ensure that the user has that role.
    if($request->user()->hasRole($roles) || !$roles)
    {
        return $next($request);
    }
    return response([
        'error' => [
        'code' => 'INSUFFICIENT_ROLE',
        'description' => 'You are not authorized to access this  resource.'
    ]
    ], 401);
    }
    private function getRequiredRoleForRoute($route)
    {
        $actions = $route->getAction();
        return isset($actions['roles']) ? $actions['roles'] : null;
    }
} 

在内核中,启用"角色"中间件:

protected $routeMiddleware = [
    'auth' => 'App'Http'Middleware'Authenticate',
    'auth.basic' => 'Illuminate'Auth'Middleware'AuthenticateWithBasicAuth',
    'guest' => 'App'Http'Middleware'RedirectIfAuthenticated',
    'roles' => 'App'Http'Middleware'CheckRole',
]; 

您还需要设置一个包含一些角色数据的角色表,然后将关系分配给用户模型上的角色。

完整代码可在此处获取:https://gist.github.com/amochohan/8cb599ee5dc0af5f4246

希望这能有所帮助。