src/Security/CasUserProvider.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\Security\Core\User\UserProviderInterface;
  4. use Symfony\Component\Security\Core\User\UserInterface;
  5. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  6. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use App\Entity\User;
  9. /**
  10.  *
  11.  * @author wendell.zheng <wxzheng@ustc.edu.cn>
  12.  */
  13. class CasUserProvider implements UserProviderInterface
  14. {
  15.     protected $em;
  16.     public function __construct(EntityManagerInterface $em)
  17.     {
  18.         $this->em $em;
  19.     }
  20.     public function loadUserByIdentifier(string $identifier): UserInterface
  21.     {
  22.         try {
  23.             $user $this->fetchUser($identifier);
  24.         } catch (UserNotFoundException $notFound) {
  25.             $user $this->createUser($identifier);
  26.         }
  27.         return $user;
  28.     }
  29.     public function loadUserByUsername(string $username): UserInterface
  30.     {
  31.         return $this->loadUserByIdentifier($username);
  32.     }
  33.     public function refreshUser(UserInterface $user): UserInterface
  34.     {
  35.         if (! $user instanceof User) {
  36.             throw new UnsupportedUserException(sprintf('Invalid user class "%s".'get_class($user)));
  37.         }
  38.         $username $user->getUserIdentifier();
  39.         return $this->fetchUser($username);
  40.     }
  41.     public function supportsClass(string $class): bool
  42.     {
  43.         return User::class === $class || is_subclass_of($classUser::class);
  44.     }
  45.     protected function createUser(string $username): UserInterface
  46.     {
  47.         $user = new User();
  48.         $user->setUsername($username);
  49.         $user->setName('');
  50.         $this->em->persist($user);
  51.         $this->em->flush();
  52.         return $user;
  53.     }
  54.     protected function fetchUser(string $username): UserInterface
  55.     {
  56.         $user $this->em->getRepository(User::class)->findOneByUsername($username);
  57.         if (! $user) {
  58.             throw new UserNotFoundException(sprintf('Username "%s" does not exist.'$username));
  59.         }
  60.         return $user;
  61.     }
  62. }