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 に答える