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();
    }

}

0 ответов

Другие вопросы по тегам