40 lines
1.3 KiB
PHP
40 lines
1.3 KiB
PHP
<?php
|
|
|
|
use App\Enums\UserRole;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Inspiring;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
|
|
use function Laravel\Prompts\password;
|
|
use function Laravel\Prompts\text;
|
|
|
|
Artisan::command('inspire', function () {
|
|
$this->comment(Inspiring::quote());
|
|
})->purpose('Display an inspiring quote');
|
|
|
|
Artisan::command('admin:create', function () {
|
|
$name = text('Name', required: true);
|
|
$email = text(
|
|
'Email',
|
|
required: true,
|
|
validate: fn (string $value) => match (true) {
|
|
! filter_var($value, FILTER_VALIDATE_EMAIL) => 'Enter a valid email address.',
|
|
User::where('email', $value)->exists() => 'A user with this email already exists.',
|
|
default => null,
|
|
},
|
|
);
|
|
$password = password('Password', required: true, validate: fn (string $value) => strlen($value) < 8
|
|
? 'The password must be at least 8 characters.'
|
|
: null);
|
|
|
|
$user = User::create([
|
|
'name' => $name,
|
|
'email' => $email,
|
|
'role' => UserRole::Admin,
|
|
'password' => $password,
|
|
]);
|
|
$user->forceFill(['email_verified_at' => now()])->save();
|
|
|
|
$this->info("Admin user {$email} created.");
|
|
})->purpose('Create an admin user (public registration is disabled)');
|