我使用了雄辩的hasOne来创建用户和用户权限表之间的关系,当用户注册到网站上,并根据他们在表单上的输入对用户进行分组时,它工作得很好,但同样的方法我认为它无法识别同一用户在网站上的签名。
下面的代码工作是当用户注册到网站时
$user->permissions()->create(UserPermission::user_group($nature_of_entity));
但是当我想使用下面的方法时,尝试获取非对象的属性时出错。
public function hasPermission($permission) {
return (bool) $this->permissions->$permission;
}
public function permissions() {
return $this->hasOne('App\User\UserPermission', 'user_id');
}
在用户数据库中,一个名为users_permissions的表,它具有(id,user_id,is_group_one,is_group_two,is_group_three)
我想看看用户在哪个组中,比如:
if($app->user->hasPermission('is_group_one')){
echo 'Group One';
}
但尝试获取非对象的属性时出错。
如果有人能帮忙的话我会非常感激,如果他们是我能做到这一点的方法,我会使用拉威尔雄辩的人际关系方法。我希望你能理解我的意思。
最佳答案
创建一个作用域,该作用域通过权限关系进行查询,并检查列(即$permission)是否为TRUE。砍掉(bool)
位。。。
public function scopeHasPermission($query, $permission)
{
return $query->permissions->where($permission, true);
}
然后在控制器中,保持原样:
if($app->user->hasPermission('is_group_one')) {
...
}