# roles de usuario con SPATIE

El control de roles es una funcionalidad importante en una aplicación con diferentes tipos de usuario. Asignar roles como editor, revisor, tutor entre otros y definir sus permisos como edición o eliminación de contenido forman parte de este control.

# Usando SPATIE

Existen muchas formas de aplicar control de roles de usuario pero una librería muy utilizada es la de spatie. La generación de roles y permisos es muy sencillo desde esta herramienta.

Para instalar spatie:

composer show spatie/laravel-permission

# Creando roles y permisos

Para crear roles y permisos podemos usar eloquent con estas instrucciones:

Crear un rol. En este ejemplo se crea el rol writer para web. web es el archivo de rutas que usamos en Laravel.

php artisan permission:create-role writer web

Crea un permiso. En este ejemplo se crea el permiso edit articles para web.

php artisan permission:create-permission "edit articles" web

Crea un rol con permisos asignados. En este ejemplo se crea el rol writer para web con dos permisos: create articles y edit articles. Esta última es la forma más rápida de asignar rol y permiso si ya sabes cuáles son. Puedes repetir la instrucción y actualizarás el registro de roles y permisos, no generará otro nuevo.

php artisan permission:create-role writer web "create articles|edit articles"

Por último, para ver los permisos y roles creados:

php artisan permission:show

# Super usuario

Es común tener un super usuario en la base de datos que tenga acceso a todo y todos los permisos. Esto sería un gate de Laravel. Ver el tema en la sección correspondiente.

En este caso se crea el gate correspondiente y el rol. En este caso se llama super-admin. Al rol super-admin no se le asigna ningún permiso porque el gate se los acepta todos.

php artisan permission:create-role super-admin

El gate

Gate::before(function ($user, $ability) {
            if ($user->hasRole('super-admin')) {
                return true;
            }
        });

# Ejemplo

En estas imágenes puedes ver que tablas se crean con la librería, las instruciones en eloquent usadas y el resultado generado.

Las instrucciones en eloquent en el proyecto:

composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan optimize:clear
php artisan migrate
php artisan permission:create-role tutor
php artisan permission:create-permission "editar tutoria"
php artisan permission:create-role tutor web "ver tutoria|crear tutoria|editar tutoria|eliminar tutoria"
php artisan permission:show
  • Línea 1 instala spatie.
  • Línea 2 publica el servicio para que sea automático su uso en el proyecto.
  • Línea 3 Limpia la caché para su correcto funcionamiento.
  • Línea 4 corre la migración para que las tables se creen en la base de datos.
  • Línea 5 Crea el rol tutor. No es necesario indicar web.
  • Línea 6 Crea el permiso editar tutoria. No es necesario indicar web.
  • Línea 7 Crea el rol tutor para web con los permisos ver tutoria, crear tutoria, editar tutoria y eliminar tutoria. En este formato debe indicarse web o tendrá inconsistencias.
  • Línea 8 Muestra los roles y permisos asignados.

Tablas generadas con spatie
Tablas generadas con spatie

Eloquent. Roles y permisos para el tutor
Eloquent. Roles y permisos para el tutor

Tabla roles
Tabla roles

Tabla permisos
Tabla permisos

Tabla roles y permisos
Tabla roles y permisos