Почему политика Laravel не работает в View/Blade?

Я пытался отфильтровать, кто может редактировать/удалять в моем приложении, используя политики, но это не работает. Пытаюсь использовать на лезвии.

ВопросПолици.php

    const UPDATE = 'update';
    const DELETE = 'delete';

    /**
     * Check if user can update a question.
     */
    public function update(User $user, Question $question): bool
    {
        return $question->isAskedBy($user) || $user->isModerator() || $user->isAdmin();
    }

    /**
     * Check if user can delete a question.
     */
    public function delete(User $user, Question $question): bool
    {
        return ($question->isAskedBy($user) || $user->isModerator() || $user->isAdmin()) && !$user->isBanned();
    }

вопрос.blade.php

@can(App\Policies\QuestionPolicy::UPDATE, App\Models\User::class, App\Models\Question::class)
   <a class = "text-sm font-light text-gray-600" href = "#">Edit</a>
@endcan
@can(App\Policies\QuestionPolicy::DELETE, App\Models\User::class, App\Models\Question::class)
   <a class = "text-sm font-light text-gray-600" href = "#">Delete</a>
@endcan

Я сделал это неправильно? Пытался войти в систему как администратор, а также пользователь, создавший вопрос, но ссылка для редактирования/удаления не отображается.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно передать фактический экземпляр вопроса (и вам не нужно передавать пользовательский класс), если политика относится к конкретному вопросу:

@can(App\Policies\QuestionPolicy::UPDATE, $question)
   <a class = "text-sm font-light text-gray-600" href = "#">Edit</a>
@endcan
@can(App\Policies\QuestionPolicy::DELETE, $question)
   <a class = "text-sm font-light text-gray-600" href = "#">Delete</a>
@endcan

$user в политике всегда указан пользователь, вошедший в систему.

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