From abe5d70f87b39c51d5fee1e92d2c749bf8c392b7 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Tue, 28 Jul 2026 13:40:29 +0100 Subject: [PATCH] new admin users seeder --- database/seeders/AdminUserSeeder.php | 86 ++++++++++++++++++++++++++++ database/seeders/DatabaseSeeder.php | 11 +++- 2 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 database/seeders/AdminUserSeeder.php diff --git a/database/seeders/AdminUserSeeder.php b/database/seeders/AdminUserSeeder.php new file mode 100644 index 0000000..ae757eb --- /dev/null +++ b/database/seeders/AdminUserSeeder.php @@ -0,0 +1,86 @@ +command) { + throw new RuntimeException( + 'AdminUserSeeder must be run interactively through Artisan.' + ); + } + + $name = trim((string) $this->command->ask( + 'Administrator name', + 'Administrator' + )); + + $email = strtolower(trim((string) $this->command->ask( + 'Administrator email', + 'admin@example.com' + ))); + + if (User::query()->where('email', $email)->exists()) { + $this->command->warn( + "A user with the email {$email} already exists. No changes were made." + ); + + return; + } + + do { + $password = $this->command->secret( + 'Administrator password' + ); + + $confirmation = $this->command->secret( + 'Confirm administrator password' + ); + + if (! is_string($password) || strlen($password) < 12) { + $this->command->error( + 'The password must contain at least 12 characters.' + ); + + continue; + } + + if ($password !== $confirmation) { + $this->command->error( + 'The passwords do not match.' + ); + + continue; + } + + break; + } while (true); + + $role = Role::firstOrCreate([ + 'name' => 'admin', + 'guard_name' => 'web', + ]); + + $user = User::query()->create([ + 'name' => $name, + 'email' => $email, + 'password' => Hash::make($password), + 'email_verified_at' => now(), + ]); + + $user->assignRole($role); + + $this->command->newLine(); + $this->command->info( + "Administrator account created for {$user->email}." + ); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 6b901f8..bf3d9cd 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -17,9 +17,14 @@ class DatabaseSeeder extends Seeder { // User::factory(10)->create(); - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + //User::factory()->create([ + // 'name' => 'Test User', + // 'email' => 'test@example.com', + //]); + + $this->call([ + AdminUserSeeder::class, ]); + } }