我的Symfony2有一个正常工作的登录系统,它使用表VtigerPortalinfo
获取用户和密码,然后验证。
但是我在另一个表中有角色,这个表为管理员返回1
,为普通用户返回0
,这是存储库中的查询。
public function findRolTypeByCustomerId($customerId)
{
$query = $this->getEntityManager()->createQuery("
SELECT u.cf771
FROM WbsGoclientsBundle:VtigerContactscf u
WHERE u.contactid = :customerid
")->setParameter('customerid', $customerId);
try {
$rol = $query->getSingleResult();
if($rol = 1)
return 'ROLE_AGENT';
else
return 'ROLE_USER';
}
catch (\Doctrine\ORM\NoResultException $e)
{
return null;
}
}
这是我的Security.yml
security:
encoders:
WbsGo\clientsBundle\Entity\VtigerPortalinfo: plaintext
role_hierarchy:
ROLE_ADMIN: [ROLE_USER]
providers:
user_db:
entity: { class: WbsGo\clientsBundle\Entity\VtigerPortalinfo, property: userName }
firewalls:
main:
pattern: /.*
provider: user_db
form_login:
always_use_default_target_path: true
login_path: /login
check_path: /login_check
remember_me: true
logout:
path: /logout
target: /
remember_me:
key: XXXXXXXX
lifetime: 1800
path: /.*
domain: ~
security: true
anonymous: true
access_control:
- { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /css, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /js, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /images, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /user, roles: ROLE_USER }
- { path: /admin, roles: ROLE_ADMIN }
- { path: /.*, roles: ROLE_USER }
所以我的问题是,如何从不同的表中设置角色而不是登录信息?正如你所看到的,在repo上它返回ROLE但是,我不知道如何解析它到安全性的东西......
答案 0 :(得分:0)
如果我正确理解了这个问题,那么只需要在调用myUserProvider.loadUserByUsername时创建自己的用户提供程序并查询角色。
非常直截了当:http://symfony.com/doc/current/cookbook/security/custom_provider.html
不要对示例中的Web服务内容感到困惑。您只需要查询您的用户,然后将角色添加到其中。