Traté de filtrar quién puede editar/eliminar en mi aplicación mediante políticas, pero no funciona. Tratando de usarlo en la hoja.
PreguntaPolítica.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(); }
pregunta.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
¿Lo hice mal? Intenté iniciar sesión como administrador y también como el usuario que creó la pregunta, pero el enlace para editar/eliminar no aparece.
Debe pasar la instancia real de la pregunta (y no necesita pasar la clase de usuario) si la política se refiere a una pregunta específica:
@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
en la política es siempre el usuario que ha iniciado sesión actualmente.