#
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.
Consulte la documentación de spatie para todas sus funcionalidades.
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.