我正在 Symfony2 中构建一个多租户应用程序。对于安全的“管理”区域,我有一个自定义实体提供程序(参见:http ://symfony.com/doc/current/cookbook/security/entity_provider.html )
但是,Symfony2 似乎只支持在单个属性上检查实体。
my_entity_provider:
entity:
class: SecurityBundle:User
property: email
但是,在我的应用程序中,一个用户可以拥有多个具有相同电子邮件地址的帐户。我还需要在登录时检查租户 ID 属性。
my_entity_provider:
entity:
class: SecurityBundle:User
property: email, tenantID
我不确定如何在 Symfony2 中实现这一点。在创建新用户时,我已经能够覆盖 loadUsername 方法,但是 Symfony2 安全性中的 login_check 没有使用该方法(而且它真的很难看)。
public function loadUserByUsername($username)
{
/* we create a concatenated string in the User entity to pass both
the email and tenantId values as the "username" */
$user_parts = explode("|", $username);
$q = $this->createQueryBuilder('u')
->where('u.tenantId = :tenantid AND u.email = :email')
->setParameter('tenantID', $user_parts[1])
->setParameter('email', $user_parts[0])
->getQuery();
try {
$user = $q->getSingleResult();
} catch (NoResultException $e) {
throw new UsernameNotFoundException(sprintf('Unable to find an active User object identified by "%s".', $username), null, 0, $e);
}
return $user;
}
关于实现具有多个属性的自定义安全提供程序的任何指导?谢谢!