feat: make admin email configurable and interactive password seeding
This commit is contained in:
@@ -67,7 +67,7 @@ class User extends Authenticatable implements FilamentUser, MustVerifyEmail
|
|||||||
|
|
||||||
public function canAccessPanel(Panel $panel): bool
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -65,6 +65,19 @@ return [
|
|||||||
|
|
||||||
'url' => env('APP_URL', 'http://localhost'),
|
'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
|
| Application Timezone
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\enum\UserLevel;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
@@ -13,12 +14,48 @@ class AdminSeeder extends Seeder
|
|||||||
*/
|
*/
|
||||||
public function run(): void
|
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([
|
User::query()->create([
|
||||||
'name' => 'admin',
|
'name' => 'admin',
|
||||||
'email' => 'admin@zemail.me',
|
'email' => $adminEmail,
|
||||||
'password' => Hash::make('password'),
|
'password' => Hash::make($password),
|
||||||
'level' => 9,
|
'level' => UserLevel::SUPERADMIN,
|
||||||
'email_verified_at' => now(),
|
'email_verified_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->command->info("Admin user created successfully with email: {$adminEmail}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ class DatabaseSeeder extends Seeder
|
|||||||
*/
|
*/
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
// User::factory(10)->create();
|
|
||||||
$this->call([
|
$this->call([
|
||||||
MetaSeeder::class,
|
|
||||||
AdminSeeder::class,
|
AdminSeeder::class,
|
||||||
|
MetaSeeder::class,
|
||||||
SettingsSeeder::class,
|
SettingsSeeder::class,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class UserSeeder extends Seeder
|
|||||||
// Create super admin user
|
// Create super admin user
|
||||||
User::factory()->superAdmin()->create([
|
User::factory()->superAdmin()->create([
|
||||||
'name' => 'Super Admin',
|
'name' => 'Super Admin',
|
||||||
'email' => 'admin@zemail.me',
|
'email' => 'super@admin.test',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Create normal users
|
// Create normal users
|
||||||
|
|||||||
Reference in New Issue
Block a user