Symfony2安全性和角色

时间:2013-08-20 09:44:33

标签: security symfony

我的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但是,我不知道如何解析它到安全性的东西......

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,那么只需要在调用myUserProvider.loadUserByUsername时创建自己的用户提供程序并查询角色。

非常直截了当:http://symfony.com/doc/current/cookbook/security/custom_provider.html

不要对示例中的Web服务内容感到困惑。您只需要查询您的用户,然后将角色添加到其中。