Políticas de autorización en Laravel para controladores y vistas

Clase 23 de 25Curso de Laravel

Resumen

La seguridad en las aplicaciones web abarca más allá de la autenticación: la autorización permite controlar qué acciones puede realizar un usuario según sus permisos. Laravel facilita esta tarea mediante políticas de acceso, otorgando un control preciso sobre lo que cada usuario puede editar o eliminar.

¿Qué es la autorización en Laravel?

En Laravel, autorización significa determinar no solo quién accede, sino qué acciones específicas puede ejecutar cada usuario autenticado en la aplicación. Al integrar políticas de acceso, se evita repetir código de validación y se centralizan las reglas de seguridad, optimizando el desarrollo.

¿Cómo crear y utilizar políticas de acceso en Laravel?

Para implementar estas políticas, Laravel facilita su creación mediante el uso del comando en terminal:

php artisan make:policy PreguntaPolicy

Esto genera un archivo donde se definirán reglas específicas para acciones como eliminar o actualizar contenido. La estructura básica para la acción de eliminación es:

public function delete(User $user, Pregunta $pregunta)
{
  return $user->id === $pregunta->user_id;
}

Luego, se vincula dicha política en el sistema de rutas con facilidad:

Route::delete()->middleware(['auth', 'can:delete,pregunta']);

Así, antes de eliminar, Laravel verifica si el usuario tiene la autorización basada en la política creada.

¿Cómo ocultar botones según permisos del usuario en vistas?

Es importante ofrecer una experiencia clara a los usuarios, ocultando botones que implican acciones que no pueden ejecutar. Laravel posee directivas eficientes para visualizar elementos según permisos específicos:

@can('update', $pregunta)
<button>Editarbutton>
@endcan

@can('delete', $pregunta)
<button>Eliminarbutton>
@endcan

De esta forma, los elementos aparecen únicamente si el usuario tiene autorización correspondiente, mejorando la usabilidad y seguridad en la aplicación.

¿Cómo impedir edición o eliminación en contenidos ya utilizados?

Otra capa importante es evitar la edición o eliminación cuando otros usuarios han interactuado con el contenido (por ejemplo, respondiendo o comentando). Esto protege la integridad de la información en la aplicación. Una condición podría definirse así:

public function update(User $user, Pregunta $pregunta)
{
  return $user->id === $pregunta->user_id && $pregunta->respuestas->isEmpty() && $pregunta->comentarios->isEmpty();
}

Este sencillo condicional comprueba tanto autoría como inexistencia de respuestas y comentarios antes de autorizar cambios.

Laravel simplifica enormemente estos controles fundamentales. Ahora tú también puedes aplicar estas mismas técnicas en otros módulos, como el blog, fortaleciendo aún más la seguridad y eficiencia de tu proyecto web. ¿Tienes dudas sobre cómo implementarlo? ¡Escribe en los comentarios!