Laravel 7.x Middleware(can:gatename) 它实际上阻止了所有人访问某个页面。我做错了什么?

Laravel 7.x Middleware(can:gatename) it actually prevent everyone to access a certain page. What did i do wrong?

我尝试制作一个授权函数角色,里面有管理员、销售和用户。我制定了几个门规则。这些是我到目前为止所做的。

App\User

public function Roles()
{
    return $this->belongsToMany('App\Role');
}

public function hasAnyRoles($roles)
{
if ($this->roles()->whereIn('name', $roles)->first()) {
        return true;
    }
        return false;

}

用户控制器

public function index()
{
    $users= User::all();
    return view('admin.users.index')->with('users', $users);
}and the other user's role as well.

AuthServiceProvider

Gate::define('manageUsers', function($user){
    return $user->hasAnyRoles(['admin, sales']);
});

routes\web

Route::namespace('Admin')->prefix('admin')->name('admin.')->middleware('can:manageUsers')->group(function(){

    Route::resource('/users', 'UsersController', ['except' =>['show', 'store', 'create']]);
});

这就是问题所在

->middleware('can:manageUsers')

在我将其放入我的路由后,我无法访问 admin.users.index.php,我想并且我想踢除 admin 之外的任何其他用户角色,并且来自 admin.users.index.php

的销售额

但不是我想的那样,它实际上把所有人踢出了 admin.users.index.php

求助!如何让管理员和销售角色可以进入 admin.users.index.php?

在你的门定义中,你有

Gate::define('manageUsers', function($user){
   return $user->hasAnyRoles(['admin, sales']); //array contains one value 'admin, sales' theres no role like that
});

应该是

Gate::define('manageUsers', function($user){
  return $user->hasAnyRoles(['admin', 'sales']); //array listed with 2 items. 
});

由于您的入口检查当前正在检查用户是否具有名为“admin, sales”的角色,因此检查将 return 为假。当然,belongsToMany 的假设是您的用户将拥有许多角色,并且每个单独的角色,如 'admin' 和 'sales' 通过 belongsToMany 关系

附加到用户