如何在Laravel中的控制器内部绑定角色中间件

时间:2018-07-06 15:46:15

标签: php laravel

我正在使用Laravel ACL,已经创建了Role中间件。我已经将中间件绑定到了Controller中。像这样-

$this->middleware('HasRole:User|Admin|Author')->except(['userEdit','roleEdit']);

但是它不能正常工作。每个角色都可以访问所有方法。如果我添加routes/web.php,那么它可以正常工作。

Route::prefix('admin')->middleware(['HasRole:Admin|Author'])->group(function(){
Route::get('/manage-user','AppController@userList')->name('user.list');
Route::get('/manage-role','AppController@roleList')->name('role.list');
});

通过这种方式Role中间件可以正常工作。 但是我想从mycontroller做到这一点。

我的控制器。

 function __construct()
{

  $this->middleware('HasRole:User|Admin|Author')->except(['userEdit','roleEdit','permissionEdit','userUpdate']);
}

我的中间件。

 public function handle($request, Closure $next, $role)
{
    // return is_array($roles)? $roles: explode('|', $roles);
    $roles=is_array($role)? $roles: explode('|', $role);
    //dd($r);

    if($request->user()===null)
    {
        return response('Insufficient Access',401);
    }

    if($request->user()->hasAnyRole($roles) || !$roles)
    {
         return $next($request);
    }
      return response('Insufficient Permission',401);
    //return $next($request);
}

0 个答案:

没有答案