7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Laravel 5

Puertas y Políticas en Laravel

Scroll to top
Read Time: 9 mins

Spanish (Español) translation by Rene Soto (you can also view the original English article)

Hoy vamos a discutir el sistema de autorización del framework web Laravel. El marco de Laravel implementa la autorización en forma de puertas y políticas Después de una introducción a las puertas y políticas, demostraré los conceptos implementando un ejemplo personalizado.

Supongo que ya conoce el sistema de autenticación Laravel incorporado, ya que es algo esencial para comprender el concepto de autorización. Obviamente, el sistema de autorización funciona junto con el sistema de autenticación para identificar la sesión de usuario legítima.

Si no está al tanto del sistema de autenticación Laravel, le recomendaría encarecidamente consultar la documentación oficial, que le brinda una visión práctica del tema.

Enfoque de Laravel a la Autorización

A estas alturas, ya debe saber que el sistema de autorización de Laravel viene en dos tipos: puertas y políticas. Aunque parezca un asunto complicado, yo diría que es bastante fácil implementarlo una vez que lo aprenda.

Las puertas le permiten definir una regla de autorización utilizando un enfoque simple basado en el cierre. En otras palabras, cuando desea autorizar una acción que no está relacionada con ningún modelo específico, la puerta es el lugar perfecto para implementar esa lógica.

Echemos un vistazo rápido a cómo se ve la autorización basada en puerta:

El fragmento de código anterior define la actualización de la regla de autorización a la que puede llamar desde cualquier lugar de su aplicación.

Por otro lado, debe usar políticas cuando desee agrupar la lógica de autorización de cualquier modelo. Por ejemplo, supongamos que tiene un modelo de publicación en su aplicación y desea autorizar las acciones de CRUD de ese modelo. En ese caso, es la política que necesita implementar.

Como puede ver, es una clase de política bastante simple que define la autorización para las acciones CRUD del modelo Post.

Así que eso fue una introducción a las puertas y políticas en Laravel. A partir de la siguiente sección, veremos una demostración práctica de cada elemento.

Puertas

En esta sección, veremos un ejemplo practico para entender el concepto de puertas.

La mayoría de las veces, termina mirando al proveedor de servicios de Laravel cuando necesita registrar un componente o un servicio. Siguiendo esa convención, avancemos y definamos nuestra puerta personalizada en app/Providers/AuthServiceProvider.php como se muestra en el siguiente fragmento de código.

En el método boot, hemos definido nuestra puerta personalizada:

Al definir una puerta, toma un cierre que devuelve TRUE o FALSE según la lógica de autorización que está definida en la definición de la puerta. Aparte de la función de cierre, hay otras formas de definir puertas.

Por ejemplo, la siguiente definición de puerta llama a la acción del controlador en lugar de a la función de cierre.

Ahora, avancemos y agreguemos una ruta personalizada para que podamos ver una demostración de cómo funciona la autorización basada en puertas. En el archivo de rutas de routes/web.php, agreguemos la siguiente ruta.

Vamos a crear un archivo de controlador asociado  app/Http/Controllers/PostController.php también.

En la mayoría de los casos, terminará utilizando el método de allows o denies de la fachada del Gate  para autorizar una determinada acción. En nuestro ejemplo anterior, hemos utilizado el método allows  para verificar si el usuario actual puede realizar la acción de update-post.

Los usuarios con ojos agudos habrían notado que solo hemos pasado el segundo argumento $post al cierre. El primer argumento, el usuario registrado actual, se inyecta automáticamente por la fachada del Gate.

Así es como se supone que debes usar gates para autorizar acciones en tu aplicación Laravel. La siguiente sección trata sobre cómo usar las políticas, si desea implementar la autorización para sus modelos.

Políticas

Como comentamos anteriormente, cuando desea agrupar lógicamente sus acciones de autorización para cualquier modelo o recurso en particular, es la política que está buscando.

En esta sección, crearemos una política para el modelo de publicación que se utilizará para autorizar todas las acciones de CRUD. Supongo que ya ha implementado el modelo Post en su aplicación; De lo contrario, algo similar hará.

El comando Laravel Artisan es tu mejor amigo cuando se trata de crear un código de apéndice. Puede utilizar el siguiente comando de Artisan para crear una política para el modelo de publicación.

Como puede ver, hemos suministrado el argumento --model = Post para que cree todos los métodos CRUD. A falta de eso, se creará una clase de política en blanco. Puede ubicar la clase de política recién creada en app/Policies/PostPolicy.php.

Vamos a reemplazarlo con el siguiente código.

Para poder utilizar nuestra clase Policy, debemos registrarla utilizando el proveedor de servicios Laravel como se muestra en el siguiente fragmento de código.

Hemos agregado el mapeo de nuestra Policy en la propiedad $policies. Le dice a Laravel que llame al método de política correspondiente para autorizar la acción CRUD.

También debe registrar las políticas utilizando el método registerPolicies, como lo hemos hecho en el método boot.

Continuando, creemos un par de rutas personalizadas en el archivo route/web.php para que podamos probar nuestros métodos de Política allí.

Finalmente, creemos un controlador asociado en app/Http/Controllers/PostController.php.

Hay diferentes formas en que puede autorizar sus acciones utilizando las Políticas. En nuestro ejemplo anterior, hemos utilizado el modelo User para autorizar nuestras acciones de modelo Post.

El modelo User proporciona dos métodos útiles para fines de autorización: can y cant. El método can se usa para verificar si el usuario actual es capaz de ejecutar una determinada acción. Y la contraparte del método can, el método cant, se utiliza para determinar la incapacidad de la ejecución de la acción.

Tomemos el fragmento del método view del controlador para ver qué hace exactamente.

En primer lugar, cargamos al usuario que ha iniciado sesión actualmente, lo que nos da el objeto del modelo de User. A continuación, cargamos una publicación de ejemplo utilizando el modelo de publicación.

Avanzando, hemos utilizado el método can del modelo de User para autorizar la acción de view del modelo Post. El primer argumento del método can es el nombre de la acción que desea autorizar, y el segundo argumento es el objeto modelo contra el que desea obtener autorización.

That was a demonstration of how to use the User model to authorize the actions using policies. Alternatively, you could use the Controller Helper as well, if you’re in the controller while authorizing a certain action.

Como puede ver, no necesita cargar el modelo User si usa el Controller Helper.

Así que ese era el concepto de políticas a su disposición, y es realmente útil para autorizar un modelo o un recurso, ya que le permite agrupar la lógica de autorización en un solo lugar.

Solo asegúrate de no usar puertas y políticas por completo para las mismas acciones del Model, de lo contrario, se crearán problemas. Eso es de mi parte por hoy, ¡y lo dejare por hoy!

Conclusión

Hoy, fue la autorización de Laravel la que ocupó el centro de mi artículo. Al comienzo del artículo, presenté los elementos principales de la autorización, puertas y políticas de Laravel.

Después de eso, pasamos por la creación de nuestra puerta y política personalizadas para ver cómo funciona en el mundo real. Espero que hayas disfrutado el artículo y hayas aprendido algo útil en el contexto de Laravel.

Para aquellos de ustedes que ya están comenzando con Laravel o que desean ampliar sus conocimientos, sitio o aplicación con extensiones, tenemos una variedad de cosas que puede estudiar en Envato Market.

¡Como siempre, me encantaría saber mas de ti en los comentarios de abajo!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.