Policies
Las Policies organizan la logica de autorizacion alrededor de un modelo o recurso particular. Son la forma recomendada de manejar autorizacion compleja en Laravel.
Crear una Policy
php artisan make:policy PostPolicy --model=Post
class PostPolicy
{
public function viewAny(User $user): bool
{
return true;
}
public function view(User $user, Post $post): bool
{
return $post->published || $user->id === $post->user_id;
}
public function create(User $user): bool
{
return $user->hasVerifiedEmail();
}
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id || $user->is_admin;
}
}
Usar Policies
// En controladores
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// Si llega aqui, esta autorizado
}
// En rutas con middleware
Route::put('/posts/{post}', [PostController::class, 'update'])
->can('update', 'post');
// En Blade
@can('update', $post)
<button>Editar</button>
@endcan
Laravel descubre automaticamente las policies cuando siguen la convencion de nombres (PostPolicy para el modelo Post). Las policies soportan respuestas con mensajes personalizados usando Response::allow() y Response::deny().