Я пытался отфильтровать, кто может редактировать/удалять в моем приложении, используя политики, но это не работает. Пытаюсь использовать на лезвии.
ВопросПолици.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
Я сделал это неправильно? Пытался войти в систему как администратор, а также пользователь, создавший вопрос, но ссылка для редактирования/удаления не отображается.
Вам нужно передать фактический экземпляр вопроса (и вам не нужно передавать пользовательский класс), если политика относится к конкретному вопросу:
@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
в политике всегда указан пользователь, вошедший в систему.