Да, вам нужно будет создать своего собственного провайдера и добавить его в качестве службы в приложение Symfony.Создаваемый вами класс провайдера пользователя должен реализовывать UserProviderInterface
. Для начала ваш класс приведен в качестве примера моего пользовательского класса, расположенного в пространстве имен / Bundle / Security / Provider.php:
namespace CB\WebsiteBundle\Security;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use CB\WebsiteBundle\Entity\User;
class Provider implements UserProviderInterface {
protected $user;
public function __contsruct (UserInterface $user) {
$this->user = $user;
}
/**
* Loads the user for the given username.
*
* This method must throw UsernameNotFoundException if the user is not
* found.
*
* @throws UsernameNotFoundException if the user is not found
* @param string $username The username
*
* @return UserInterface
*/
function loadUserByUsername($username) {
$user = User::find(array('username'=>$username));
if(empty($user)){
throw new UsernameNotFoundException('Could not find user. Sorry!');
}
$this->user = $user;
return $user;
}
/**
* Refreshes the user for the account interface.
*
* It is up to the implementation if it decides to reload the user data
* from the database, or if it simply merges the passed User into the
* identity map of an entity manager.
*
* @throws UnsupportedUserException if the account is not supported
* @param UserInterface $user
*
* @return UserInterface
*/
function refreshUser(UserInterface $user) {
return $user;
}
/**
* Whether this provider supports the given user class
*
* @param string $class
*
* @return Boolean
*/
function supportsClass($class) {
return $class === 'MC\WebsiteBundle\Entity\User';
}
}
Некоторые ключевые вещи, которые следует отметить в этом классе, это то, что он использует пользовательскую сущность User, которую вы определяете сами, что облегчит подключение к промежуточному программному обеспечению Java.В моем случае я подключаюсь к REST API, чтобы получить информацию о моем пользователе, и мой пользовательский класс использует статическую функцию User :: find ($ critisates) для поиска пользователей по имени пользователя.
Как только у вас есть собственный пользователькласс, который взаимодействует с вашим промежуточным программным обеспечением, и у вас есть новый провайдер, вам нужно добавить провайдера в качестве сервиса в конфигурацию вашего пакета: YourBundle / Resources / config.xml:
<parameters>
<parameter key="cb_security_user.class">CB\WebsiteBundle\Entity\User</parameter>
<parameter key="cb_security_provider.class">CB\WebsiteBundle\Security\Provider</parameter>
</parameters>
<services>
<service id="cb_security_user" class="%cb_security_user.class%" />
<service id="cb_security_provider" class="%cb_security_provider.class%">
<argument type="service" id="cb_security_user" />
</service>
</services>
Вы можете найти более подробную информациюв моем блоге здесь: Пользовательские провайдеры в Symfony2
Надеюсь, это поможет!