• ENTRAR
  • No hay productos en el carrito.

Uso de Policies

Viendo 3 publicaciones - del 1 al 3 (de un total de 3)
  • Autor
    Publicaciones
  • #6032

    Jose
    Participante

    Buenas a todos estoy intentando entender bien el uso de las Policies de Laravel pero no termino de pillarlo. He realizado varios proyectos de Laravel y la verdad que no las he usado nunca ya que uso middlewares para el control de acceso a determinadas zonas de la app web. A mi entender las Policies son políticas de acceso en donde por ejemplo según el rol de un usuario puede ver un tema u otro, me equivoco? Alguien puede mostrarme algún tutoríal decente y completo? Un saludo.

    #6066

    Israel Parra
    Jefe de claves

    Hola Jose,

    Para manejar la autorización a determinados recursos tenemos dos cosas, Gates y Policies, para los primeros, pienso en su uso para las rutas, y los segundos para modelos y controladores.

    Con gates podemos definir algo como lo siguiente.

    
    Gate::define('create-user', function($user)
    {
        return $user->id === 1;
    });
    

    Y para utilizarlo simplemente podemos hacer lo siguiente.

    
    if(Gate::allows('create-user'))
    {
        //tiene acceso
    }
    

    En cambio, las policies trabajan desde mi punto de vista en otro nivel, utilizan clases que están relacionadas a modelos, podemos crear una de la siguiente forma.

    
    php artisan make:policy PostPolicy --model=Post
    

    Ahora debemos registrarla en el AuthServiceProvider.

    
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        Post::class => PostPolicy::class,
    ];
    
    public function boot()
    {
        $this->registerPolicies();
    
        //
    }
    

    Ahora que tenemos una policy definida, vamos a abrir el PostPolicy y añadimos el siguiente método.

    
    public function create(Post $post)
    {
    	return auth()->user()->id === $post->user_id;
    }
    

    Si el usuario que tiene asignado el post es el autor ese método devolverá true, los métodos pueden tener el nombre que tu quieras.

    Finalmente para utilizar esa Policy podemos hacer lo siguiente en cualquier sitio, por ejemplo en un controlador post.

    
    if(auth()->user()->can('create')) {
    
    }
    

    O a nivel de ruta con middlewares.

    
    Route::get('/post', ['middleware' => 'can:create,App\Post', function () {
    	//tiene permisos para la policy Post y el método create
    }]);
    

    Aunque hay mucho más, una pequeña introducción a los Gates y Policies es ese, si haces las pruebas verás que es sencillo.

    Saludos.

    • Esta respuesta fue modificada hace 1 año, 2 meses por  Israel Parra.
    #6068

    Jose
    Participante

    Grande! Voy a practicarlo un saludo

Viendo 3 publicaciones - del 1 al 3 (de un total de 3)

Debes estar registrado para responder a este debate.

Cursosdesarrolloweb ©. Todos los derechos reservados.
Inscríbete a cualquier curso y accede a todos los cursos gratuitos para siempre
+ +

Login

Create an Account Back to login/register