Gate 不允许用户,而他已经拥有该权限
Gate not allows user while he has already that permission
我正在与 Laravel 8.5 合作,我想开发自己的 ACL。
所以我在权限和用户模型之间建立了这种 ManyToMany 关系:
User.php:
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
Permission.php:
public function users()
{
return $this->belongsToMany(User::class);
}
然后我将此自定义权限插入 permissions
table:
然后也将其插入主元 table pemrission_user
:
然后在 web.php
,我尝试了这个:
Route::get('/', function () {
$user = auth()->user();
// dd($user->permissions()->get());
if(Gate::allows('edit-user')){
dd(2);
}else{
dd(1);
}
});
所以我尝试检查登录用户是否具有权限 edit-user
,然后显示 2 作为结果,但现在它 returns 1不知何故,意味着用户没有这个权限!
但是,如果我取消注释 dd($user->permissions()->get());
,我会看到:
所以它显示用户已经拥有此 edit-user
权限,但我不明白为什么在这种情况下 Gate 不授权用户。
所以如果你知道,我求求你帮助我,因为我真的不知道如何解决这个...
您还需要为您的 Gate 定义 edit-user
,因为目前您的权限模型对 Gate 没有任何意义。
Gate::define('edit-user', function (User $user) {
return $user->permissions()->whereName('edit-user')->exists();
});
可在此处找到更多信息:https://laravel.com/docs/8.x/authorization#writing-gates
否则,您可以使用策略:
class UserPolicy
{
public function update(User $user)
{
return $user->permissions()->whereName('edit-user')->exists();
}
}
然后允许用户:
$user->can('update', User::make());
可在此处找到有关政策的更多信息:https://laravel.com/docs/master/authorization#creating-policies
还有一个名为 laravel-permission 的开源软件包,由 Spatie 制作,您可以查看以了解更多信息。
我正在与 Laravel 8.5 合作,我想开发自己的 ACL。
所以我在权限和用户模型之间建立了这种 ManyToMany 关系:
User.php:
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
Permission.php:
public function users()
{
return $this->belongsToMany(User::class);
}
然后我将此自定义权限插入 permissions
table:
然后也将其插入主元 table pemrission_user
:
然后在 web.php
,我尝试了这个:
Route::get('/', function () {
$user = auth()->user();
// dd($user->permissions()->get());
if(Gate::allows('edit-user')){
dd(2);
}else{
dd(1);
}
});
所以我尝试检查登录用户是否具有权限 edit-user
,然后显示 2 作为结果,但现在它 returns 1不知何故,意味着用户没有这个权限!
但是,如果我取消注释 dd($user->permissions()->get());
,我会看到:
所以它显示用户已经拥有此 edit-user
权限,但我不明白为什么在这种情况下 Gate 不授权用户。
所以如果你知道,我求求你帮助我,因为我真的不知道如何解决这个...
您还需要为您的 Gate 定义 edit-user
,因为目前您的权限模型对 Gate 没有任何意义。
Gate::define('edit-user', function (User $user) {
return $user->permissions()->whereName('edit-user')->exists();
});
可在此处找到更多信息:https://laravel.com/docs/8.x/authorization#writing-gates
否则,您可以使用策略:
class UserPolicy
{
public function update(User $user)
{
return $user->permissions()->whereName('edit-user')->exists();
}
}
然后允许用户:
$user->can('update', User::make());
可在此处找到有关政策的更多信息:https://laravel.com/docs/master/authorization#creating-policies
还有一个名为 laravel-permission 的开源软件包,由 Spatie 制作,您可以查看以了解更多信息。