Zend_Auth: Как проверить роль помимо имени пользователя и пароля? - PullRequest
0 голосов
/ 23 октября 2009

Я хочу, чтобы моя таблица '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;
}

Ответы [ 2 ]

2 голосов
/ 24 октября 2009

Возможно, вы пытаетесь использовать Zend_Auth для целей, для которых он не предназначен.

Zend_Auth должен сообщать вам, является ли пользователь тем, кем, по его словам, он является, а не имеет ли он разрешение делать определенную вещь.

Вы ищете Zend_ACL: http://zendframework.com/manual/en/zend.acl.html

0 голосов
/ 26 октября 2009

Если вы еще не хотите использовать 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_Db_Select, который использует Zend_Auth, и изменить его при необходимости.

...