Authentication Laravel 5.2:使用委托验证控制器操作角色

Authentication Laravel 5.2:使用委托验证控制器操作角色,authentication,laravel-5.2,laravel-routing,entrust,Authentication,Laravel 5.2,Laravel Routing,Entrust,拉雷维尔的新城市。我已经用Yii完成了这项工作,而且非常简单。:) Laravel版本:5.2 委托版本:dev-laravel-5 让我解释一下我的要求。 我有两个角色:经理和首席执行官。并且他们有以下权限 In PostController: 1.Role: Manager Action: View 2.Role : CEO Action: create,edit,delete 我创建了具有上述权限的角色 In PostController:

拉雷维尔的新城市。我已经用Yii完成了这项工作,而且非常简单。:)

Laravel版本:5.2 委托版本:dev-laravel-5

让我解释一下我的要求。 我有两个角色:经理和首席执行官。并且他们有以下权限

In PostController:
    1.Role: Manager
      Action: View
    2.Role : CEO
      Action: create,edit,delete
我创建了具有上述权限的角色

In PostController:
    1.Role: Manager
      Action: View
    2.Role : CEO
      Action: create,edit,delete
现在让我们看看我做了什么。我创建了两个中间件RoleCheck来检查角色和PermissionCheck来检查权限

RoleCheck.php

namespace App\Http\Middleware;

use Closure;

    class RoleCheck
    {
      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()->view('errors.401');
        }

        public function getRequiredRoleForRoute($route)
        {
            $actions = $route->getAction();
            return isset($actions['roles']) ? $actions['roles'] : null;
        }
    }
PermissionCheck.php

namespace App\Http\Middleware;

use Closure;

class PermissionCheck
{

    public function handle($request, Closure $next, $permission= null)
    {   
        //exit;
        if (\Auth::user()->can($permission)) {

            return $next($request);
        } else {
            return response()->view('errors.401');
        }

    }
}
现在我将这个中间件添加到routeMiddleware数组中的Kernel.php中

'role' => Middleware\RoleCheck::class,
'permission' => Middleware\PermissionCheck::class
现在,我添加了一个身份验证角色

Route::group(['middleware' => ['auth','role']], function () {
    Route::resource('posts', 'PostsController');
});
这很好用。但我无法验证用户在角色中授予的权限

在PostController.php中

function __construct() {
        $this->middleware('auth');
        $this->middleware('permission:can_view',['only'=>'show']);
        $this->middleware('permission:can_create_post',['only'=>'create','store']);
        $this->middleware('permission:can_update_post',['only'=>'edit','update']);
        $this->middleware('permission:can_delete_post',['only'=>'destroy']);
    }
和route.php

Route::group(['middleware' => 'web','permission'], function () { 
    Route::resource('posts', 'PostsController');            
});
这很好用。但这种身份验证是基于权限的。但现在我想基于给定的角色进行身份验证。所以试着改变路线

Route::group(['middleware' => ['web','role'],'roles'=>['Manager','CEO']], function () { 
    Route::resource('posts', 'PostsController');            
});
并删除了_construct()函数。但在这里,我面临着一个问题。具有
角色的用户可以访问未分配给他的所有操作。具有
Manager
的用户也可以访问未分配给他的所有操作

如何做到这一点?如何对角色中分配的权限进行身份验证。我现在完全混淆了中间件和身份验证。请帮忙