use Spatie\Permission\Traits\HasRoles;
...
use HasRoles;
MUY IMPORTANTE: Si al escribir lo de use HasRoles; te da error debes ejecutar:
composer update
Y luego cerrar y volver a abrir el Visual Studio Code.
Creamos el Seeder para el Role:
php artisan make:seeder RoleSeeder
En database\seeders\RoleSeeder.php en la function run:
$role1 = Role::create(['name' => 'Admin']);
$role2 = Role::create(['name' => 'Blogger']);
// es una buena política llamarlo igual q la ruta a la q se quiere dar permiso
Permission::create(['name' => 'admin.home'])->syncRoles([$role1,$role2]);
Permission::create(['name' => 'admin.users.index'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.users.edit'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.users.update'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.categories.index'])->syncRoles([$role1,$role2]);
Permission::create(['name' => 'admin.categories.create'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.categories.edit'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.categories.destroy'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.tags.index'])->syncRoles([$role1,$role2]);
Permission::create(['name' => 'admin.tags.create'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.tags.edit'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.tags.destroy'])->syncRoles([$role1]);
Permission::create(['name' => 'admin.posts.index'])->syncRoles([$role1,$role2]);
Permission::create(['name' => 'admin.posts.create'])->syncRoles([$role1,$role2]);
Permission::create(['name' => 'admin.posts.edit'])->syncRoles([$role1,$role2]);
Permission::create(['name' => 'admin.posts.destroy'])->syncRoles([$role1,$role2]);
En el seeder del User que nos hemos creado antes para nosotros en database\seeders\UserSeeder.php:
User::create([
...
])->assignRole('Admin');
Y ahora debemos añadirlo (para q se pueda ejecutar) a database\seeders\DatabaseSeeder.php:
$this->call(RoleSeeder::class); // ponerlo antes de la llamada el UserSeeder, lógicamente
Y pasar de nuevo la migración para que se genere todo en las tablas:
php artisan migrate:fresh --seed
Y a partir de ahora ya puedes capar los accesos, por ejemplo en el menú de config/adminlte.php (si estás usando esta plantilla) bastaría con añadir 'can' y la ruta que se permite:
[
'text' => 'Crear nuevo post',
'route' => 'admin.posts.create',
'icon' => 'fas fa-fw fa-file',
'can' => 'admin.posts.create'
]
Y para capar en cualquier view normal:
@can('admin.categories.edit')
...
@endcan
Para capar mediante rutas en routes\admin.php hacerlo con un middleware:
Route::get('', [HomeController::class, 'index'])->middleware('can:admin.home')->name('admin.home');
O si se prefiere caparlo directamente en el controller sería creando un método __construc donde indicar qué permiso puede acceder a cada método:
public function __construct()
{
$this->middleware('can:admin.posts.index')->only('index');
$this->middleware('can:admin.posts.create')->only('create','store');
$this->middleware('can:admin.posts.edit')->only('edit','update');
$this->middleware('can:admin.posts.destroy')->only('destroy');
}
No hay comentarios:
Publicar un comentario