From a84a4a0c152cd8791cfcdf330ff7e8f99d31653d Mon Sep 17 00:00:00 2001 From: idevakk <219866223+idevakk@users.noreply.github.com> Date: Sun, 30 Nov 2025 08:06:12 -0800 Subject: [PATCH] feat: make admin email configurable and interactive password seeding --- app/Models/User.php | 2 +- config/app.php | 13 +++++++++ database/seeders/AdminSeeder.php | 43 +++++++++++++++++++++++++++-- database/seeders/DatabaseSeeder.php | 3 +- database/seeders/UserSeeder.php | 2 +- 5 files changed, 56 insertions(+), 7 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 55640dd..aad3217 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -67,7 +67,7 @@ class User extends Authenticatable implements FilamentUser, MustVerifyEmail public function canAccessPanel(Panel $panel): bool { - return str_ends_with($this->email, '@zemail.me') && $this->level === UserLevel::SUPERADMIN && $this->hasVerifiedEmail(); + return $this->email === config('app.admin_email') && $this->level === UserLevel::SUPERADMIN && $this->hasVerifiedEmail(); } /** diff --git a/config/app.php b/config/app.php index 866af9b..912a38b 100644 --- a/config/app.php +++ b/config/app.php @@ -65,6 +65,19 @@ return [ 'url' => env('APP_URL', 'http://localhost'), + /* + |-------------------------------------------------------------------------- + | Admin Email + |-------------------------------------------------------------------------- + | + | This is the email address that has access to the admin panel. Only this + | exact email address with SUPERADMIN level and verified email can access + | the admin panel. + | + */ + + 'admin_email' => env('ADMIN_EMAIL'), + /* |-------------------------------------------------------------------------- | Application Timezone diff --git a/database/seeders/AdminSeeder.php b/database/seeders/AdminSeeder.php index 1dd819c..003685a 100644 --- a/database/seeders/AdminSeeder.php +++ b/database/seeders/AdminSeeder.php @@ -2,6 +2,7 @@ namespace Database\Seeders; +use App\enum\UserLevel; use App\Models\User; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\Hash; @@ -13,12 +14,48 @@ class AdminSeeder extends Seeder */ public function run(): void { + $adminEmail = config('app.admin_email'); + + if (! $adminEmail) { + $this->command->error('ADMIN_EMAIL not configured in config/app.php or .env file'); + + return; + } + + // Check if admin user already exists + $existingAdmin = User::where('email', $adminEmail)->first(); + if ($existingAdmin) { + $this->command->info("Admin user with email {$adminEmail} already exists"); + + return; + } + + // Ask for admin password + $password = $this->command->secret('Enter admin password (input will be hidden):'); + + if (empty($password)) { + $this->command->error('Password cannot be empty'); + + return; + } + + // Confirm password + $passwordConfirmation = $this->command->secret('Confirm admin password:'); + + if ($password !== $passwordConfirmation) { + $this->command->error('Passwords do not match'); + + return; + } + User::query()->create([ 'name' => 'admin', - 'email' => 'admin@zemail.me', - 'password' => Hash::make('password'), - 'level' => 9, + 'email' => $adminEmail, + 'password' => Hash::make($password), + 'level' => UserLevel::SUPERADMIN, 'email_verified_at' => now(), ]); + + $this->command->info("Admin user created successfully with email: {$adminEmail}"); } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 2e7fa10..ceda2e2 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -12,10 +12,9 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // User::factory(10)->create(); $this->call([ - MetaSeeder::class, AdminSeeder::class, + MetaSeeder::class, SettingsSeeder::class, ]); } diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index ff680e7..e0e5f80 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -15,7 +15,7 @@ class UserSeeder extends Seeder // Create super admin user User::factory()->superAdmin()->create([ 'name' => 'Super Admin', - 'email' => 'admin@zemail.me', + 'email' => 'super@admin.test', ]); // Create normal users