Laravel Nova ограничивает просмотр ресурса

#laravel #laravel-nova #laravel-authorization

#laravel #laravel-nova #laravel-авторизация

Вопрос:

У меня следующая проблема:

Пользователи (которые не являются администраторами) могут просматривать ресурс (например, мои документы ресурсов), если они получают к нему прямой доступ по ссылке.

Я изменил indexquery так, чтобы они не могли видеть ресурс в индексном представлении, но они также должны получать 403, когда пытаются получить к нему прямой доступ через URL.

Я уже создал политику для своего ресурса documents, и я знаю, что мне каким-то образом нужно изменить функцию просмотра.

   public function view(User $user, User $model){
    return true;
    // return canViewOwn($user); 
  }
 

Я попытался создать пользовательскую функцию в модели документов следующим образом:

   public function canViewOwn($user){
    // This should test whether the current requested resource has the same user Id 
    //  as the currently logged in user

    if($user->id == auth()->user()->id) {
        return true;
    }
 }
 

У моего ресурса есть поле belongsTo, которое принимает идентификатор пользователя, но я не знаю, как проверить это в функции модели ресурсов.

В конце пользователь должен иметь возможность видеть только себя или созданные им ресурсы (которые связаны через поле belongsTo).

Я ценю любую помощь, спасибо!

Ответ №1:

Я только что понял это сам, я был слишком смущен, работая в политике пользователя:

Это было просто:

 public function view(User $user, User $model){
    if($user->role === 'admin'){
        return true;
    } 
    return $model->id == $user->id;
}
 

И для любого другого ресурса, который я использовал:

 public function view(User $user, Document $document){
    if($user->role === 'admin'){
        return true;
     } 
     return $document->user_id == $user->id;
}