【问题标题】:Multiple auth user types in Laravel 5Laravel 5 中的多种身份验证用户类型
【发布时间】:2017-02-08 18:22:42
【问题描述】:

如何将 auth 用户组分成 3 个组,我需要 admin、client 和 worker 组。

这是我的认证用户路线:

Route::group(['middleware' => 'auth'], function(){

    Route::get('home', array(
        'as' => 'home',
        'uses'  => 'HomeController@index'
        ));


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


});

【问题讨论】:

    标签: php authentication laravel-5


    【解决方案1】:

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

    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

    希望这会有所帮助。

    【讨论】:

    • RoleTableSeeder.php 应该放在哪里?
    • 这应该进入您的数据库/种子目录。这对这个系统不是必需的,它只是设置一些示例角色。只要您在数据库中创建一个名为“Root”的角色就可以了。
    • 得到这个:找不到类'App\Role'
    • 您需要创建一个“角色”模型,例如:
    • 已创建,但现在出现此错误:User.php 第 46 行中的 ErrorException:尝试在 HandleExceptions->handleError('8', '尝试获取 User.php 第 46 行中的非对象属性在 User.php 第 46 行中获取非对象'、'/var/www/htdocs/ProjectMenager/app/User.php'、'46'、array('roles' => 'Admin')) 的属性
    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2015-08-21
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2018-09-01
    相关资源
    最近更新 更多