Roles y permisos con el paquete laravel-permission II

Método más sencillo y claro en:

https://programando-laravel.blogspot.com/2021/02/ejemplo-sencillo-de-roles-y-permisos.html


php artisan make:seeder PermissionsSeeder
En \database\seeders\PermissionsSeeder.php:
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
...
$arrPermisos = [];
array_push($arrPermisos, Permission::create(['name' => 'crear_peliculas']));
array_push($arrPermisos, Permission::create(['name' => 'editar_peliculas']));
array_push($arrPermisos, Permission::create(['name' => 'borrar_peliculas']));

$viewPelPermiso = Permission::create(['name' => 'ver_peliculas']);
array_push($arrPermisos, $viewPelPermiso);
$superadminRole = Role::create(['name' => 'superadmin']);
$superadminRole->syncPermissions($arrPermisos);

$viewPelRole = Role::create(['name' => 'Ver Películas']);
$viewPelRole->givePermissionTo($viewPelPermiso);

// crear los tipos de usuarios que habrá
$userSuperAdmin = User::create([
'name' => 'superadmin',
'email' => 'superadmin@gmail.com',
'password' => Hash::make('12345678'),
]);
$userSuperAdmin->assignRole($superadminRole);

$userViewPel = User::create([
'name' => 'userview',
'email' => 'userview@gmail.com',
'password' => Hash::make('12345678'),
]);
$userViewPel->assignRole($viewPelRole);

$userSinPermiso = User::create([
'name' => 'userSinPermiso',
'email' => 'userSinPermiso@gmail.com',
'password' => Hash::make('12345678'),
]);
// en este no hay q asignar ningun rol pues no va a tener ningun permiso

En \database\seeders\DatabaseSeeder.php: $this->call(PermissionsSeeder::class);
Ejecutar el seeder:
php artisan db:seed
MUY IMPORTANTE: si al ejecutar el seeder da problemas de caché (pq ya se ejecutó antes) hay q borrar desde el phpmyadmin el contenido de las tablas de permisos que se haya creado y luego ejecutar:
php artisan cache:forget spatie.permission.cache
php artisan cache:clear
Y ya volver a ejecutar:
php artisan db:seed
Y ahora solo hay que retocar las views especificando que se puede ver según los permisos q se tenga:
@canany(['crear_peliculas','editar_peliculas', 'borrar_peliculas', 'ver_peliculas'])
...
@endcan
...
@can('crear_peliculas')
...
@endcan
Y también poder caparlo en routes/web.php mediante middleware:
Para ello primero en \app\Http\Kernel.php añadir a protected $routeMiddleware los siguientes:
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,

Y luego en routes/web.php:
Route::group(['middleware' => ['permission:crear_peliculas|editar_peliculas|borrar_peliculas|ver_peliculas']], function () {
Route::resource('libros', App\Http\Controllers\librosController::class);
});

Más información en: https://spatie.be/docs/laravel-permission/v3/basic-usage/middleware
Otro ejemplo más sencillo de entender: https://programando-laravel.blogspot.com/2021/02/ejemplo-sencillo-de-roles-y-permisos.html

No hay comentarios:

Publicar un comentario