在Laravel中检查访问器中的权限

时间:2019-04-04 20:10:52

标签: php laravel permissions

我想检查用户是否具有从User模型中获取特定属性的适当权限。

我已经做了简单的访问器示例,但这还不够,因为它不会从email集合中删除/取消设置User属性。

public function getEmailAttribute($value)
{
   if(Auth::User()->hasPermissionTo('users.show.email')) {
     return $value;
   }
   return false;
}

然后我使用User::Get()并得到以下输出:

"name": "admin",
"email": "false",
...

访问器几乎可以正常工作,但是我想完全隐藏email属性。

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖模型本身的toJsontoArray方法来实现此目的,具体取决于您使用哪种方法。因此,例如toJson可能看起来像这样:

public function toJson( $options = 0 )
{
    if( ! auth()->user()->hasPermissionTo('users.show.email')) {
        $this->hidden[] = 'email';     
    }
    return parent::toJson($options);
}

注意,我使用逆逻辑,因为无论如何您都希望返回结果。 toArray也是如此。您应该在User模型中使用它。