GlosarioSeguridad

¿Qué es Policy?

Las Policies en Laravel son clases que organizan la logica de autorizacion alrededor de un modelo especifico, definiendo metodos como create, update y delete para controlar que acciones puede realizar cada usuario.

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().