如何允许访问Symfony 2中不在数据库中的用户

时间:2014-05-29 16:17:56

标签: symfony

运行Symfony 2.4.4。我正在针对LDAP(通过IIS身份验证)对用户进行身份验证,然后通过实体用户提供程序从数据库中加载该用户。

这很好用。

但是,我想向访问者提供我的应用程序,这些应用程序在我的数据库中没有帐户访问应用程序的某些部分(特别是公共报告)。当我尝试创建一个没有角色的用户时,我得到一个" UsernameNotFound Exception"来自/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php

当用户不在数据库中时,是否有办法为用户提供匿名令牌或访问者角色?

1 个答案:

答案 0 :(得分:0)

您是否有理由单独处理这些用户而不将其添加到数据库?我在最近写的一个应用程序中有一个非常类似的设置,如果用户还没有帐户,我只需添加一个基本角色的用户。假设你正在实现UserProviderInterface:

public function loadUserByUsername($username) {
    $q = $this
        ->createQueryBuilder('u')
        ->where('u.username = :username')
        ->setParameter('username', $username)
        ->getQuery();

    try {
        // The Query::getSingleResult() method throws an exception
        // if there is no record matching the criteria.
        $user = $q->getSingleResult();
    } catch (NoResultException $e) {
        // If the user successfully authenticated but doesn't exist
        // in our database, create a user with BASIC role
        $em = $this->getEntityManager();
        $roles = $em->getRepository('AcmeEntityBundle:Role')->findBy(array(
            'role' => 'ROLE_BASIC'
        ));
        $user = $this->createUser($username, $roles, array());
    }

    return $user;
}