Roles y permisos con el paquete laravel-permission V: Capar los accesos a roles y users dependiendo de tus permisos

php artisan make:seeder UserRolesPermissionsSeeder
En este nuevo seeder:
use Spatie\Permission\Models\Permission;
...
// roles
Permission::create(['name' => 'view_roles']);
Permission::create(['name' => 'edit_roles']);
Permission::create(['name' => 'delete_roles']);
Permission::create(['name' => 'create _roles']);

// users
Permission::create(['name' => 'view_users']);
Permission::create(['name' => 'edit_users']);
Permission::create(['name' => 'delete_users']);
Permission::create(['name' => 'create_users']);


php artisan db:seed --class=UserRolesPermissionsSeeder
En DatabaseSeeder.php añadir:
$this->call(UserRolesPermissionsSeeder::class);
En los blade ya puedes poner:
@can("edit_users")
...
@endcan

Y ya desde el Admin añadir al role de Superadmin todos estos nuevos permisos y jugar con los permisos.
También caparlo de routes/web.php:
Route::group(['middleware' => ['permission:view_users|edit_users|delete_users|create_users']], function () {
    Route::resource('users', App\Http\Controllers\UserController::class);
});

Hacer lo mismo en todos los blade de roles y en routes/web.php:
Route::group(['middleware' => ['permission:view_roles|edit_roles|delete_roles|create_roles']], function () {
    Route::resource('roles', App\Http\Controllers\RoleController::class);
});

Cambiarlo tb en el blade del menú lateral para q no salga: resources\views\layouts\menu.blade.php:
@canany(['view_roles', 'edit_roles', 'delete_roles','create_roles'])
...
@endcan

Es muy buena política (para que así nos sea más fácil identificarlos) llamar igual a los permisos que a las rutas, por ejemplo en database\seeders\RoleSeeder.php:
$roleAdmin = Role::create(['name' => 'Superadmin']);
$roleBlogger = Role::create(['name' => 'Blogger']);
...
Permission::create(['name' => 'admin.categories.create'])->syncRoles([$roleAdmin]);
Importante: Siempre que hagamos cualquier cambio en un seeder lógicamente hay que volver a pasar los seeders:
php artisan migrate:fresh --seed
Y luego en la view que enlaza con esa ruta:
@can('admin.categories.create')
<a class="btn btn-primary" href="{{ route('admin.categories.create') }}"> Añadir nueva categoría </a>
@endcan

Si en nuestro proyecto hemos instalado la plantilla de AdminLTE para añadir los "can" sería en config\adminlte.php:
[
...
'route' => 'admin.categories.create',
...
'can' => 'admin.categories.create'
],

Si no quieres caparlo desde el route puedes hacerlo directamente desde el constructor del controller:
public function __construct() {
// en only le indicas los métodos a los q puede entrar con ese permiso
    $this->middleware('can:admin.tags.index')->only('index');
    $this->middleware('can:admin.tags.create')->only('create','store');
    $this->middleware('can:admin.tags.edit')->only('edit','update');
    $this->middleware('can:admin.tags.destroy')->only('destroy');
}

No hay comentarios:

Publicar un comentario