我对spatie/laravel-permissions
有问题...
我在Gate
中使用AuthServiceProvider.php
来定义Superadmin
(可以绕过所有权限而无需将其注册到角色中)...
它可以与can('the-permission')
助手一起很好地工作。
但是它不适用于Auth::user()->hasPermissionTo('the-permission')
...
。
。
下面是我的代码:
。
在AuthServiceProvider.php
中:
public function boot()
{
$this->registerPolicies();
Gate::before(function ($user, $ability) {
$superadmin_rolename = 'Superadmin';
$guard_name = 'web-admin';
return $user->hasRole($superadmin_rolename , $guard_name ) ? true : null;
});
}
。
。
刀片中:
@can('add products')
<button type="submit">Add Product</button>
@endcan
// this will work perfectly, the button will be shown
。
。
在控制器中:
public function addProduct()
{
$admin = Auth::guard('web-admin')->user();
if($admin->hasPermissionTo('add products')) return true;
return false;
}
// this is not working (it return false)... i dont know why.... it should return true....
所以,正如我上面向您展示的:
Gate
定义超级管理员can()
和$user->can()
完美配合$user->hasPermissionTo()
一起使用<---------这就是我想知道的谢谢
答案 0 :(得分:1)
基于@Remul的评论,我发现只有can()
或$user->can()
与Gate::before
才能完美搭配。...
那么,如果我想使用诸如$user->hasAnyPermission
或$user->hasAllPermissions
之类的另一种方法,怎么办?
。
这就是我的工作...我决定在Admin
模型中创建一个自定义方法。
<?php
namespace Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class Admin extends Authenticatable
{
use HasRoles;
protected $guard_name = "web-admin";
protected $fillable = ['name', 'email', 'password'];
public function canAny(array $permissions)
{
foreach($permissions as $e){
if($this->can($e)) return true;
}
return false;
}
public function canAll(array $permissions)
{
foreach($permissions as $e){
if(!$this->can($e)) return false;
}
return true;
}
}