首页 > 解决方案 > 如何在 laravel 中的 Controller 中绑定角色中间件

问题描述

我正在研究 Laravel ACL,我创建了一个Role中间件。我已经在我的控制器中绑定了中间件。像这样-

$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);
}

标签: phplaravel

解决方案


推荐阅读