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 关系
附加到用户
我尝试制作一个授权函数角色,里面有管理员、销售和用户。我制定了几个门规则。这些是我到目前为止所做的。
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 关系
附加到用户