<?php
declare(strict_types=1);
namespace App\Infrastructure\Auth\Symfony\Security\Provider;
use App\Domain\Administrator\Model\Administrator;
use App\Domain\Administrator\Repository\AdministratorRepositoryInterface;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class AdminEmailProvider implements UserProviderInterface
{
public function __construct(
private readonly AdministratorRepositoryInterface $administratorRepository
) {
}
/**
* {@inheritdoc}
*/
public function refreshUser(UserInterface $user): Administrator
{
return $this->loadUserByIdentifier($user->getUserIdentifier());
}
public function supportsClass(string $class): bool
{
return Administrator::class === $class;
}
public function loadUserByIdentifier(string $identifier): Administrator
{
$admin = $this->administratorRepository->findByEmail($identifier);
if (!$admin) {
throw new UserNotFoundException('Administrator not found');
}
if (!$admin->isActive()) {
throw new UserNotFoundException('Administrator not found');
}
return $admin;
}
}