我有三个模特:
注意:
我试图通过用户的直接权限或角色权限获得用户的总权限。因此,我需要将两者合并为一个集合,并计算总数。
我已经为belongsToMany和User建立了Role关系
public function permissions()
{
return $this->belongsToMany('App\Permission');
}我该怎么做?
发布于 2018-11-24 06:23:26
我是通过flatMap弄明白的。
发布于 2018-11-24 06:27:28
您需要使用hasManyThrough关系
下面是指向文档的链接:雄辩的文件
所以你会这样做:
public function permissions()
{
$directPermissions = $this->belongsToMany('App\Permission');
$rolePermissions = $this->hasManyThrough('App\Permissions', 'App\Role');
return $directPermissions->merge($rolePermissions);
}发布于 2018-11-24 10:01:50
我不确定,但这将有助于打开您的user model
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
public function hasRole(...$roles)
{
foreach($roles as $role)
{
if($this->roles->contains('name',$role))
{
return true;
}
}
return false;
}
public function hasPermission($permission)
{
return $this->hasPermissionThroughRole($permission) || (bool) $this->permissions->where('name',$permission->name)->count();
}
public function hasPermissionThroughRole($permission)
{
foreach($permission->roles as $role)
{
if($this->roles->contains($role))
{
return true;
}
}
return false;
}然后打开您的Role Model并添加以下内容
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
public function users()
{
return $this->belongsToMany(User::class);
}打开你的permission model
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function users()
{
return $this->belongsToMany(User::class);
}并最终引导角色的所有权限并运行命令php artisan make:provider PermissionServiceProvider。
打开您新创建的服务提供商
添加
use App\Permission;
use Illuminate\Support\Facades\Gate;在boot方法下添加代码
Permission::get()->map(function ($permission)
{
Gate::define($permission->name, function ($user) use ($permission)
{
return $user->hasPermission($permission);
});
});希望有帮助,如果你发现任何困难,请评论下面
https://stackoverflow.com/questions/53455651
复制相似问题