如何使用两个集合来验证zfcuser?

时间:2014-06-26 11:43:54

标签: mongodb authentication doctrine-orm zend-framework2 zfcuser

我在zf2应用程序中使用Doctrine和MongoDB ODM模块。 ZfcUser用于授权。

有没有办法使用两个集合,比如usersclients通过zfcuser + doctrine进行身份验证?我很好奇,如果有办法将两个mongo集合合并为一个集合用于身份验证?

2 个答案:

答案 0 :(得分:2)

您不需要将用户合并到一个集合中,因为您可以拥有多个身份验证适配器' (有关示例,请参阅ZfcUser\Authentication\Adapter\Db

这些是在全局配置文件中定义的:zfcuser.global.php

我的每个适配器都按优先级顺序运行,直到返回成功的身份验证结果。

例如;我为UsersCandidates实体配置了以下配置。

/**     
 * Authentication Adapters
 *
 * Specify the adapters that will be used to try and authenticate the user
 *
 * Default value: array containing 'ZfcUser\Authentication\Adapter\Db' with priority 100
 * Accepted values: array containing services that implement 'ZfcUser\Authentication\Adapter\ChainableAdapter'
 */
'auth_adapters' => array( 
    50  => 'JobboardCandidate\Authentication\Adapter\CandidateDatabaseAdapter',
    75  => 'JobboardUser\Authentication\Adapter\UserDatabaseAdapter',
    //100 => 'ZfcUser\Authentication\Adapter\Db', [this is the default]
),

答案 1 :(得分:1)

据我所知,您希望获得一个包含两种不同文档类型的集合,以便您可以使用此集合进行身份验证。 如果使用 doctrine继承映射,则可以有两个不同的类,并在一个集合中解析它们。 在这种情况下,您的Client课程会扩展您的User课程。如果您在findAll中使用UserRepository方法,则会在一个Collection

中同时获得客户和用户

这将帮助您实现您想要的目标:

<?php
namespace MyProject\Model;

/**
 * @Document
 * @InheritanceType("SINGLE_COLLECTION")
 * @DiscriminatorField(name="discriminator", type="string")
 * @DiscriminatorMap({"user" = "User", "client" = "Client"})
 */
class User
{
    // ...
}

/**
 * @Document
 */
class Client extends User
{
    // ...
}

然后

$userRepository->findAll();

阅读有关继承映射here in the Doctrine documentation

的更多信息