我希望我的数据库中的'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;
}
答案 0 :(得分:2)
您可能正在尝试将Zend_Auth用于其无意的目的。
Zend_Auth应该告诉你用户是否是他所说的人,而不是他们是否有权做某件事。
您正在寻找Zend_ACL:http://zendframework.com/manual/en/zend.acl.html
答案 1 :(得分: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对象,并根据需要对其进行修改。