#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;
}