Проверка разрешений в аксессорах в Laravel - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу проверить, имеет ли пользователь соответствующие разрешения для получения определенного атрибута из модели 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 Ответ

1 голос
/ 04 апреля 2019

Этого можно добиться, переопределив метод toJson или toArray самой модели, в зависимости от того, какую модель вы используете.Например, toJson может выглядеть следующим образом:

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

Обратите внимание, что я использую обратную логику, потому что в любом случае вы захотите вернуть результат.То же самое будет для toArray.Это должно быть в вашей User модели.

...