我在我的symfony项目中使用pommbundle,我想使用symfony安全用户 . pommbundle有可能吗?
我已经创建了一个实体实现用户界面
用户
namespace AppBundle\Entity\Model\MyDb1\PublicSchema;
use PommProject\ModelManager\Model\FlexibleEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Clientweb
*
* Flexible entity for relation
* public.ClientWEB
*
* @see FlexibleEntity
*/
class Clientweb extends FlexibleEntity implements UserInterface
{
public function getRoles() {
return $this->get('Roles');
}
public function getPassword() {
return $this->get('Password');
}
public function getSalt() {
return '';
}
public function getUsername() {
return $this->get('Login');
}
public function eraseCredentials() {
// Ici nous n'avons rien à effacer.
// Cela aurait été le cas si nous avions un mot de passe en clair.
}
}
安全
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
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
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
particulier: { password: parpass, roles: ['ROLE_PARTICULIER'] }
professionnel: { password: propass, roles: ['ROLE_PROFESSIONNEL'] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
principal:
id: security_userprovider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
provider: principal
form_login:
login_path: connexion
check_path: connexion_check
failure_path: connexion_failure
default_target_path: compte_client
always_use_default_target_path: true
remember_me:
name: 'CERECARE_SITE'
secret: '%secret%'
lifetime: 604800
path: /
logout:
path: deconnexion
target: homepage
用户提供商
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: Authentication request failed. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(code: 0): Bad credentials. at C:\\Program Files (x86)\\PostgreSQL\\EnterpriseDB-ApachePHP\\apache\\www\\SITE_CERECARE\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Security\\Core\\Authentication\\Provider\\UserAuthenticationProvider.php:90, Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(code: 0): The presented password is invalid. at C:\\Program Files (x86)\\PostgreSQL\\EnterpriseDB-ApachePHP\\apache\\www\\SITE_CERECARE\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Security\\Core\\Authentication\\Provider\\DaoAuthenticationProvider.php:67)"} []
请求
public function findbyLogin($username)
{
// select employee_id, name, … from my_schema.employee where name ~* $1
$sql = strtr(
"select {projection} from {relation} where \"Login\" ~* $*",
[
'{projection}' => $this->createProjection(), // expand projection
'{relation}' => $this->structure->getRelation(),
]
);
// ↓ return an iterator on flexible entities
// ↓ parameters are escaped and converted.
return $this->query($sql, [$username])->current();
}
}