假设我有一个名为User
的模型,其中定义了几个关系(role
和permissions
)。如何直接进入与我的用户模型相关的角色集合或相关的权限集合?
我想做什么:
控制器:
if (Auth::user()->hasPermission('test'))
{ // code goes here}
和我的模型:
public function hasPermission($name)
{
$permission = \Permission::where('name', '=', $name)->get();
$list = ($this->overwrite_permission) ? $this->permissions : $this->role->permissions;
//here I want to have a collection to use contains()
if ($list->contains($permission))
{
return true;
}
return false;
}
答案 0 :(得分:2)
你可以这样做,而不是检查收集:
public function hasPermission($name)
{
return ($this->overwrite_permission)
? (bool) $this->permissions()->whereName($name)->first()
: (bool) $this->role->permissions()->whereName($name)->first();
}
如果权限模型位于相关权限(适当地对用户或角色)或者返回null,则第一个()将获取权限模型,因此转换为布尔值将完成工作。
如果您仍想使用您的代码,这是要更改的行:
// it returns Collection, while you need Model (or its id) for contains() method
$permission = \Permission::where('name', '=', $name)->get();
// change to:
$permission = \Permission::where('name', '=', $name)->first();
其余代码没问题,$ list确实是一个集合(除非你没有正确设置与权限的关系)