Implementar roles y permisos en Laravel con Spatie para tu blog

Autor: J. Luis, 17 octubre, 2024

Guía práctica para implementar roles y permisos en Laravel con Spatie, ideal para gestionar usuarios en un blog de forma eficiente.

Implementar roles y permisos en Laravel con Spatie para tu blog

Para implementar roles y permisos en Laravel para un blog, puedes usar el paquete Spatie Laravel Permission, que te permite gestionar roles y permisos de forma sencilla.

 

Pasos para Implementar Spatie Laravel Permission

Aquí tienes una guía paso a paso:

Instalar el paquete

Primero, necesitas instalar el paquete de Spatie Laravel Permission.  

bash

composer require spatie/laravel-permission 

Publicar la migración

Luego, publica la configuración del paquete y ejecuta las migraciones para crear las tablas necesarias.

bash

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate 

 

Configurar el modelo de usuario

Debes agregar el trait HasRoles a tu modelo User para habilitar roles y permisos.

En el archivo app/Models/User.php, añade lo siguiente:  

php

use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable {
     use HasRoles;
     // El resto del código del modelo 
} 

 

Crear Roles y Permisos

Puedes crear roles y permisos en los seeders o directamente en el código usando el siguiente método: 

php

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

// Crear permisos
Permission::create(['name' => 'crear post']);
Permission::create(['name' => 'editar post']);
Permission::create(['name' => 'borrar post']);

// Crear roles y asignar permisos
$role = Role::create(['name' => 'admin']);
$role->givePermissionTo(['crear post', 'editar post', 'borrar post']);

$role = Role::create(['name' => 'escritor']);
$role->givePermissionTo('crear post');

 

Asignar Roles a los Usuarios

Puedes asignar roles a los usuarios en cualquier parte del código. Por ejemplo, en un controlador: 

php

use App\Models\User;
use Spatie\Permission\Models\Role;

$user = User::find(1);
$user->assignRole('admin');

// También puedes asignar varios roles
$user->assignRole(['admin', 'escritor']);

 

Verificar Permisos en Controladores y Vistas

Para controlar el acceso en tus controladores, puedes usar los métodos can o hasRole. Aquí te dejo algunos ejemplos:

  • En Controladores

php

public function store(Request $request)
{
    if (auth()->user()->can('crear post')) {
        // El usuario tiene permiso para crear un post
    } else {
        // El usuario no tiene permiso
        abort(403);
    }
} 
  • En las Vistas Blade

php

@if(auth()->user()->can('crear post'))
    <a href="/posts/create">Crear nuevo post</a>
@endif

 

Middleware de Roles y Permisos

Puedes proteger rutas con el middleware proporcionado por el paquete. Para ello, añade lo siguiente en tu archivo routes/web.php

php

Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/admin', [AdminController::class, 'index']);
});

También puedes proteger rutas por permisos: 

php

Route::group(['middleware' => ['permission:crear post']], function () {
    Route::get('/posts/create', [PostController::class, 'create']);
});

 

Ejemplo de uso para un blog:

  1. Administrador: Tiene permisos para crear, editar y borrar posts.
  2. Escritor: Solo tiene permiso para crear posts.
  3. Editor: Tiene permiso para editar posts.

Con este enfoque, puedes definir quién tiene acceso a diferentes funcionalidades dentro del blog en base a sus roles y permisos.


Leido 3498 veces | 0 usuarios

Código fuente no disponible.

Compartir link del tutorial con tus amigos

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú