Fix seeder to actually create admin user

Two issues fixed:
1. Changed create() to firstOrCreate() - makes seeder idempotent
   (can run multiple times without 'already exists' errors)

2. Seeder now CREATES admin user instead of just assigning role
   to existing user. Previous code assumed user existed.

Admin credentials:
- Email: admin@example.com
- Password: password
This commit is contained in:
2026-03-11 07:18:12 +02:00
parent 2ff7a24736
commit e274d41f19

View File

@@ -22,21 +22,27 @@ public function run(): void
];
foreach ($permissions as $permission) {
Permission::create(['name' => $permission]);
Permission::firstOrCreate(['name' => $permission]);
}
$adminRole = Role::create(['name' => 'admin']);
$adminRole = Role::firstOrCreate(['name' => 'admin']);
$adminRole->givePermissionTo(Permission::all());
$editorRole = Role::create(['name' => 'editor']);
$editorRole = Role::firstOrCreate(['name' => 'editor']);
$editorRole->givePermissionTo(['users.view', 'users.edit']);
$viewerRole = Role::create(['name' => 'viewer']);
$viewerRole = Role::firstOrCreate(['name' => 'viewer']);
$viewerRole->givePermissionTo(['users.view']);
$admin = User::where('email', 'admin@example.com')->first();
if ($admin) {
$admin->assignRole('admin');
}
// Create admin user if not exists
$admin = User::firstOrCreate(
['email' => 'admin@example.com'],
[
'name' => 'Admin',
'password' => bcrypt('password'),
'email_verified_at' => now(),
]
);
$admin->assignRole('admin');
}
}