<?php
namespace App\Console\Commands\Admin;
use App\Enums\Acl\Role;
use App\Repositories\UserRepository;
use Illuminate\Console\Command;
use function Laravel\Prompts\select;
class SetUserRoleCommand extends Command
{
protected $signature = "koel:admin:set-user-role {email : The user's email}";
protected $description = 'Set a user\'s role';
public function __construct(private readonly UserRepository $userRepository)
{
parent::__construct();
}
public function handle(): int
{
$user = $this->userRepository->findOneByEmail($this->argument('email'));
if (!$user) {
$this->components->error('The user account cannot be found.');
return self::FAILURE;
}
$roles = [];
Role::allAvailable()->each(static function (Role $role) use (&$roles): void {
$roles[$role->value] = $role->label();
});
$role = select(
label: 'What role should the user have?',
options: $roles,
default: $user->role->value,
);
$user->syncRoles($role);
$this->info("The user's role has been set to <info>'$role'</info>.");
return self::SUCCESS;
}
}