Отображать только собственный пост и все сообщения для администратора с политикой laravel
Как я могу использовать политику Laravel для отображения всех продуктов для администратора и редактора, но собственный продукт для поставщика?
Я сделал следующее в view
а также view-any
public function viewAny(User $user)
{
return true;
}
public function view(User $user, Product $product)
{
return $user->id === $product->vendor_id;
}
И в моем шаблоне клинка я сделал следующее:
@foreach($allProducts as $productLists)
@can('view', $productLists)
codes....
@endcan
@endforeach
2 ответа
Почему вы не используете фильтры политики?
Просто держите приведенный ниже код в верхней части вашего ProductPolicy
public function before($user, $ability){
if($user->role == 'admin' || $user->role == 'employee'){
return true;
}
}
Вы можете посетить laravel-documentation для получения дополнительной информации.
Вы не можете сделать это в Политике...
Политика предназначена для предоставления вам True или False, чтобы текущий пользователь мог получить доступ к действию в вашем контроллере...
в вашем случае и администратор, и обычный пользователь могут получить доступ к действию вашего контроллера, поэтому политика не место для этого...
вы можете сделать это в контроллере, например:
$currentUser = auth()->user();
if ($currentUser->is_admin) {
$values = DB::table('products')->get();
} else {
$values = DB::table('products')->where('owner_id', $currentUser->id)->get();
}
теперь вы можете передать значения $ в ваше представление....