Files
Nexora/database/seeders/RolePermissionSeeder.php
Javi 883daf32ed
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
añadir funicionalidades de permisos y grupos
2025-04-27 23:43:22 +02:00

87 lines
2.7 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RolePermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// database/seeders/RolePermissionSeeder.php
// Crear rol de administrador
$adminRole = Role::updateOrCreate(
['name' => 'admin'],
//['description' => 'Administrador del sistema']
);
// Obtener o crear todos los permisos existentes
$permissions = Permission::all();
if ($permissions->isEmpty()) {
// Crear permisos básicos si no existen
$permissions = collect([
'view projects',
'edit projects',
'delete projects',
'view roles',
'create roles',
'edit roles',
'delete roles',
'view permissions',
'create permissions',
'edit permissions',
'delete permissions',
'assign permissions',
'revoke permissions',
])->map(function ($permission) {
return Permission::updateOrCreate(
['name' => $permission],
['guard_name' => 'web']
);
});
}
// Sincronizar todos los permisos con el rol admin
$allPermissions = Permission::all();
$adminRole->syncPermissions($allPermissions);
$adminRole->syncPermissions($permissions);
// Crear usuario admin si no existe
/*User::updateOrCreate(
['email' => env('ADMIN_EMAIL', 'admin@example.com')],
[
'name' => 'Administrador',
'password' => bcrypt(env('ADMIN_PASSWORD', 'password')),
'email_verified_at' => now()
]
)->assignRole($adminRole);*/
$adminEmail = env('ADMIN_EMAIL', 'admin@example.com');
$user = User::where('email', $adminEmail)->first();
if ($user) {
// Asignar rol solo si no lo tiene
if (!$user->hasRole($adminRole)) {
$user->assignRole($adminRole);
}
} else {
// Crear solo si no existe
User::create([
'name' => 'admin',
'email' => $adminEmail,
'password' => bcrypt(env('ADMIN_PASSWORD', '12345678')),
'email_verified_at' => now()
])->assignRole($adminRole);
}
}
}