You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.7 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\PermissionRegistrar;
class RoleSeeder extends Seeder
{
public function run(): void
{
// 🔥 Limpiar cache de permisos para evitar conflictos
app()[PermissionRegistrar::class]->forgetCachedPermissions();
/* ================= PERMISOS ================= */
$permissions = [
// Ejemplo: CRUD de preguntas
'ver-preguntas',
'crear-preguntas',
'editar-preguntas',
'eliminar-preguntas',
// Ejemplo: CRUD de cursos
'ver-cursos',
'crear-cursos',
'editar-cursos',
'eliminar-cursos',
];
foreach ($permissions as $permission) {
Permission::firstOrCreate([
'name' => $permission,
'guard_name' => 'web',
]);
}
/* ================= ROLES ================= */
$roles = [
'usuario' => [], // rol básico sin permisos
'administrador' => $permissions, // asigna todos los permisos al administrador
'superadmin' => $permissions, // opcionalmente igual que administrador
];
foreach ($roles as $roleName => $rolePermissions) {
$role = Role::firstOrCreate([
'name' => $roleName,
'guard_name' => 'web',
]);
// Asignar permisos si los hay
if (!empty($rolePermissions)) {
$role->syncPermissions($rolePermissions);
}
}
}
}