* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Security\Core\Exception\UnsupportedUserException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; /** * Represents a class that loads UserInterface objects from some source for the authentication system. * * In a typical authentication configuration, a user identifier (e.g. a * username or email address) credential enters the system (via form login, or * any method). The user provider that is configured with that authentication * method is asked to load the UserInterface object for the given identifier (via * loadUserByIdentifier) so that the rest of the process can continue. * * Internally, a user provider can load users from any source (databases, * configuration, web service). This is totally independent of how the authentication * information is submitted or what the UserInterface object looks like. * * @author Fabien Potencier * * @template-covariant TUser of UserInterface */ interface UserProviderInterface { /** * Refreshes the user. * * It is up to the implementation to decide if the user data should be * totally reloaded (e.g. from the database), or if the UserInterface * object can just be merged into some internal array of users / identity * map. * * @psalm-return TUser * * @throws UnsupportedUserException if the user is not supported * @throws UserNotFoundException if the user is not found */ public function refreshUser(UserInterface $user): UserInterface; /** * Whether this provider supports the given user class. */ public function supportsClass(string $class): bool; /** * Loads the user for the given user identifier (e.g. username or email). * * This method must throw UserNotFoundException if the user is not found. * * @return TUser * * @throws UserNotFoundException */ public function loadUserByIdentifier(string $identifier): UserInterface; }