Contenido del curso
Configuración base
- 3

Configuración inicial de un foro en Laravel
04:59 min - 4

Personalizar componentes Blade con Tailwind CSS
10:26 min - 5

Primer componente Livewire en Laravel
11:10 min - 6

Categorías dinámicas con Laravel y Blade
06:18 min - 7

Migración y factory para preguntas en Laravel
05:37 min - 8

Cómo listar preguntas con Tailwind y Laravel
07:57 min - 9

Respuestas anidadas y migrate fresh en Laravel
06:26 min
Preguntas
Pregunta
Respuesta
Flujo de trabajo tradicional
Conclusiones
Políticas de autorización en Laravel
Resumen
Editar contenido ajeno es uno de los errores de seguridad más comunes en aplicaciones web. Con las políticas de autorización en Laravel puedes restringir acciones según el usuario dueño del recurso, evitando que cualquiera modifique respuestas que no le pertenecen. Esta guía te muestra cómo aplicarlo paso a paso en un sistema de preguntas y respuestas.
¿Qué es una política de autorización en Laravel y por qué usarla?
Una política, o policy, es una clase que centraliza las reglas de acceso de un usuario sobre una entidad. En lugar de repetir la misma condición if en vistas, controladores y componentes, defines la lógica una sola vez y la reutilizas en todo el sistema.
En este caso, queremos que cada usuario edite solo sus propias respuestas. Sin política, tendrías que escribir manualmente la validación en cada archivo. Con política, editas una vez y el cambio impacta en todos lados.
¿Qué hace una policy en Laravel? Aísla la lógica de permisos sobre una entidad respecto al usuario autenticado. Devuelve true o false y se reutiliza en vistas, componentes y controladores.
¿Cómo se crea una policy con Artisan y se define el método update?
El primer paso ocurre en la terminal. Ejecutas el comando de Artisan para generar la clase:
bash php artisan make:policy AnswerPolicy
La convención es nombrar la política con el nombre de la entidad seguido de la palabra Policy. Esto crea un archivo dentro de la carpeta Policies.
¿Qué lógica va dentro del método update?
Dentro de la clase defines un método llamado update que recibe dos parámetros: el usuario autenticado y la entidad afectada, en este caso la respuesta. La condición es directa:
- El
iddel usuario debe coincidir con eluser_idde la respuesta. - Si coinciden, el método devuelve true y permite la acción.
- Si no, devuelve false y bloquea el acceso.
Esa comparación es toda la regla de negocio. Pensar en políticas como restricciones del usuario respecto a otra entidad te ayuda a estructurar mejor cualquier sistema de permisos.
¿Cómo se aplica la política en el componente PHP y en la vista Blade?
Una vez creada la policy, hay que invocarla. Aquí entra la directiva authorize del lado de PHP y la directiva @can del lado de Blade.
¿Cómo autorizar la acción dentro del componente?
En el método encargado de actualizar la respuesta, agregas una llamada para evaluar si el usuario está autorizado. El primer argumento es el nombre del método de la policy (update) y el segundo es la instancia de la respuesta. Si la validación falla, Laravel lanza una excepción de autorización.
Para que funcione, debes importar la clase de autorización del trait AuthorizesRequests, ubicada en el sistema de autenticación de Laravel. Sin esta importación verás un error al hacer clic en editar. Visualizar ese error es útil porque entiendes por qué se necesita la configuración, no solo cómo hacerla.
Con el método autorizado, al intentar editar una respuesta ajena ni siquiera se abre el formulario. Aparece un mensaje de no autorizado. En tus propias respuestas, el flujo continúa normal y puedes guardar los cambios.
¿Cómo ocultar el botón editar con la directiva @can?
Validar en PHP no es suficiente para la experiencia visual. Si el botón sigue visible, el usuario lo verá aunque no funcione. Para ocultarlo, usas la directiva @can en la vista Blade:
- Pregunta si el usuario puede ejecutar la acción
updatesobre la respuesta. - Si la respuesta es afirmativa, renderiza el botón.
- Si no, lo oculta por completo.
¿Qué significa @can en Blade? Es una directiva que pregunta si el usuario tiene la habilidad de ejecutar una acción definida en una policy. Can literalmente significa habilidad o poder.
Después de aplicar @can, el botón de editar aparece únicamente en las respuestas propias. En las demás, simplemente no existe en el DOM.
¿Qué cambios quedan implementados al final?
El flujo completo combina tres archivos trabajando juntos. Cada uno cumple un rol específico:
- La policy define la regla: el usuario solo puede actualizar respuestas con su mismo
user_id. - El componente PHP llama a
authorizepara bloquear la acción a nivel de servidor. - La vista Blade usa
@canpara ocultar el botón visualmente.
Esta separación es lo que hace mantenible al sistema. Si mañana cambias la regla, por ejemplo permitiendo también a administradores editar cualquier respuesta, modificas únicamente la policy y todo el resto sigue funcionando.
¿Ya implementaste políticas en tu proyecto Laravel? Cuéntame en los comentarios qué entidad protegiste primero y cómo definiste tus reglas.