0

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

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;
}
4

2 回答 2

2

您可能试图将 Zend_Auth 用于非预期目的。

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

您正在寻找 Zend_ACL:http: //zendframework.com/manual/en/zend.acl.html

于 2009-10-23T20:42:44.930 回答
0

如果你还不想为此使用 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 对象,并根据需要对其进行修改。

于 2009-10-26T16:54:44.077 回答