我对Laravel很陌生,目前正在解决以下问题:
我想创建一个用户组管理。所以我想将用户添加到一个组并向这些组添加权限,以获得授权。我的目标是拥有User::hasRight('exampleRight')
功能,我可以轻松调用。为此我想在User-Class中使用一个函数链接。我有这个函数来创建UserGroup-Table的连接(将User-ID连接到Group-ID):
public function role()
{
return $this->hasOne('UserGroup');
}
下一个函数应返回一个权限数组。我的计划是编写类似
的内容public function rights()
{
$rights = Groups::find($this->role()->groups_id)->rights;
return $rights;
}
GroupsModel当然有这个功能来获取权利:
public function rights()
{
return $this->hasMany('Rights');
}
但显然$this->role()->groups_id
没有给我groups_id,而是抛出错误Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$groups_id
。当我离开->groups_id
时,确实将它添加到控制器中,如:
(注意控制器,没有型号!)
public function getUserRole()
{
return User::find(10)->rights->groups_id;
}
它给了我正确的答案。有人能告诉我,错误是什么?我真的没弄错...
提前谢谢你!
此致
答案 0 :(得分:0)
在此特定方法中,您需要删除括号:
public function rights()
{
$rights = Groups::find($this->role->groups_id)->rights;
return $rights;
}
当你执行role()
时,你实际上是在告诉Laravel返回关系对象,所以你可以做一些事情,比如
$this->role()->where('x', '=', 'y')->get();
答案 1 :(得分:0)
为什么在用户和组之间有中间表?只需向用户提供group_id即可。以下是我过去如何构建它。
用户所属组
Group belongsToMany Right
// Inside User Model
public function can($name)
{
foreach ($this->group->rights as $right)
{
if ($right->name == $name)
{
return true;
}
}
return false;
}
// Elsewhere
if (!$user->can('edit_blogs'))
{
return 'FORBIDDEN';
}