Symfony2 - Pommbundle и пользовательский интерфейс
Я использую pommbundle с моим проектом Symfony и хочу использовать пользователя безопасности Symfony. Это возможно с pommbundle?
Я создал сущность, реализующую пользовательский интерфейс
USER
пространство имен AppBundle\Entity\Model\MyDb1\PublicSchema; использовать PommProject\ModelManager\Model\FlexibleEntity; использовать Symfony\Component\Security\Core\User\UserInterface; /** * Clientweb * * Гибкая сущность для отношений * public.ClientWEB * * @see FlexibleEntity */ класс Clientweb расширяет FlexibleEntity реализует UserInterface { публичная функция getRoles() { return $this->get('Roles'); } публичная функция getPassword() { return $this->get('Password'); } публичная функция getSalt() { вернуть ''; } публичная функция getUsername() { return $this->get('Логин'); } публичная функция eraseCredentials() { // Ici nous n'avons rien à effacer. // Cela aurait été le cas sious avions un mot de passe en clair. } }
БЕЗОПАСНОСТЬ
безопасность: кодеры: Symfony \ Component \ Security \ Core \ User \ User: обычный текст AppBundle\Entity\Model\MyDb1\PublicSchema\Clientweb: sha512 role_hierarchy: ROLE_USER: ROLE_USER ROLE_PARTICULIER: ROLE_PARTICULIER ROLE_PROFESSIONNEL: ROLE_PROFESSIONNEL ROLE_SUPER_ADMIN: ROLE_ADMIN провайдеры: в памяти: объем памяти: пользователей: пользователь: {пароль: пароль пользователя, роли: [ 'ROLE_USER' ] } определитель: {пароль: пароль, роли: ['ROLE_PARTICULIER'] } professionalnel: {пароль: пропасс, роли: ['ROLE_PROFESSIONNEL'] } admin: {пароль: adminpass, роли: [ 'ROLE_ADMIN' ] } основной: id: security_userprovider брандмауэры: Dev: pattern: ^/(_(профилировщик |wdt)|css|images|js)/ безопасность: ложь главный: шаблон: ^ / анонимно: правда поставщик: основной form_login: логин_путь: связь check_path: connexion_check error_path: connexion_failure default_target_path: compte_client always_use_default_target_path: true Запомни меня: имя: 'CERECARE_SITE' секрет: "% секрет%" срок службы: 604800 дорожка: / выйти: путь: деконексия цель: домашняя страница
ПОСТАВЩИК ПОЛЬЗОВАТЕЛЯ
namespace AppBundle\Entity\Provider;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Config\Definition\Exception\Exception;
use PommProject\Foundation\Pomm;
use PommProject\Foundation\Where;
use \AppBundle\Entity\Model\MyDb1\PublicSchema\ClientwebModel;
class UserProvider implements UserProviderInterface {
private $pomm;
public function __construct(Pomm $pomm) {
$this->pomm = $pomm;
}
public function loadUserByUsername($username) {
$user = $this->pomm
->getDefaultSession()
->getModel(ClientwebModel::class)
->findbyLogin($username);
if($user!=null)
{
return $user;
}
else
{
throw new UsernameNotFoundException(sprintf('Login "%s" does not exist.', $username));
}
}
public function refreshUser(UserInterface $user) {
if (!$user instanceof User) {
throw new UnsupportedUserException(
sprintf('Instances of "%s" are not supported.', get_class($user))
);
}
return $this->loadUserByUsername($user->getUsername());
}
public function supportsClass($class) {
return $class === 'AppBundle\Entity\Model\MyDb1\PublicSchema\Clientweb';
}
}
[2017-04-25 14:24:02] security.INFO: Ошибка аутентификации. {"исключение":"[объект] (Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(код: 0): неверные учетные данные. в C:\\Program Files (x86)\\PostgreSQL\\EnterpriseDB-ApachePHP\\ апач \\ WWW \\SITE_CERECARE\\ поставщик \\ Symfony \\ Symfony \\ \\ ЦСИ Symfony \\ Component \\ \\ Security Core \\ АУТЕНТИФИКАЦИЯ \\Provider\\UserAuthenticationProvider.php:90, Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(код: 0): неверный пароль: C:\\Program Files (x86)\\PostgreSQL\\EnterpriseDB-ApachePHP\\apache\\www\\SITE_CERECARE\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\ Безопасность \\ Core \\ Аутентификация \\ Поставщик \\DaoAuthenticationProvider.php:67)"} []
ЗАПРОС
публичная функция findbyLogin($username) { // выбираем employee_id, name, … из my_schema.employee, где name ~* $1 $sql = strtr( "выберите {проекция} из {отношения}, где \" Логин \" ~* $*", [ '{projection}' => $this->createProjection(), // развернуть проекцию '{отношение}' => $this->structure->getRelation(), ]); // ↓ возвращаем итератор для гибких объектов // ↓ параметры экранируются и преобразуются. return $this->query($sql, [$username])->current(); } }