Отображать только собственный пост и все сообщения для администратора с политикой 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();
        }

теперь вы можете передать значения $ в ваше представление....

Другие вопросы по тегам