Php Zend_Auth:除了用户名和密码外,如何检查角色?

Php Zend_Auth:除了用户名和密码外,如何检查角色?,php,zend-framework,zend-auth,Php,Zend Framework,Zend Auth,我希望数据库中的'users'表包含所有不同级别的用户(成员、版主、管理员等)。因此,我的'users'表中有一列是role。我希望能够检查角色,看看他们是否有权限登录到应用程序的特殊部分。我该怎么做?以下是迄今为止我的身份验证适配器: protected function _getAuthAdapter($formData) { $dbAdapter = Zend_Db_Table::getDefaultAdapter(); $authAdapter = new Zend_A

我希望数据库中的
'users'
表包含所有不同级别的用户(成员、版主、管理员等)。因此,我的
'users'
表中有一列是role。我希望能够检查角色,看看他们是否有权限登录到应用程序的特殊部分。我该怎么做?以下是迄今为止我的身份验证适配器:

protected function _getAuthAdapter($formData)
{
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $authAdapter  = new Zend_Auth_Adapter_DbTable($dbAdapter);

    $authAdapter->setTableName('users');
    $authAdapter->setIdentityColumn('username');
    $authAdapter->setCredentialColumn('password');

    $authAdapter->setIdentity($formData['username']);
    $authAdapter->setCredential(md5($formData['password']));

    return $authAdapter;
}

您可能正试图将Zend_Auth用于它不打算用于的目的

Zend_Auth应该告诉你一个用户是否是他所说的那个人,而不是他们是否有权做某件事


您正在寻找Zend_ACL:

如果您还不想将Zend_ACL用于此目的,请尝试以下方法:

protected function getAuthAdapter()
{
    if (null === $this->_auth)
    {
        $a = new Zend_Auth_Adapter_DbTable(
            Zend_Registry::get('db')
        );

        $a->setTableName('users')
          ->setIdentityColumn('email')
          ->setCredentialColumn('password');

        // Get the select object and
        // modify to check against whatever you want
        $s = $a->getDbSelect();
        $s->where('userType = ?', 'admin'); // Or whatever, you can see what I'm doing

        $this->_auth = $a;
    }

    return $this->_auth;
}

您可以看到,您可以使用getDbSelect()获取Zend_Auth正在使用的实际Zend_Db_Select对象,并根据需要对其进行修改。

我同意Zend_Acl可能更适合此工作,但我只需要一个临时解决方案。我还不需要一个完整的ACL。我还没有验证,但这正是我需要的,谢谢!