jey_val_star
@jey_val_star
Программист

Роли в Zend Fraemwork — как проверить при авторизации?

Сайт на zend fraemwork. У сайта есть админка.
админы и пользователи хранятся в одной таблице
Как при авторизации в админку сделать проверку роли пользователя?

Кусок кода для авторизаци
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                
// указываем таблицу, где необходимо искать данные о пользователях
 // колонку, где искать имена пользователей, а также колонку, где хранятся пароли
$authAdapter->setTableName('users')
                      ->setIdentityColumn('email')
                      ->setCredentialColumn('password');
                
 // получаем введённые данные
 $email = $this->getRequest()->getPost('email');
$password = $this->getRequest()->getPost('password');
            
 // подставляем полученные данные из формы
$authAdapter->setIdentity($email)
                      ->setCredential(md5($password));
                
 // получаем экземпляр Zend_Auth
 $auth = Zend_Auth::getInstance();
                
 // делаем попытку авторизировать пользователя
 $result = $auth->authenticate($authAdapter);


Заранее спасибо
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
1 вариант
Использовать Zend_Acl

2 вариант
Задать дополнительное условие в SQL запросе авторизации:
$authAdapter->getDbSelect()->where('status = "admin"');


Кстати, лучше не подменять пароль на его MD5 хеш вот так:
$authAdapter->setIdentity($email)->setCredential(md5($password));

а сделать вот так:
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                
// указываем таблицу, где необходимо искать данные о пользователях
// колонку, где искать имена пользователей, а также колонку, где хранятся пароли
$authAdapter->setTableName('users')
            ->setIdentityColumn('email')
            ->setCredentialColumn('password')
            ->setCredentialTreatment('MD5(?)');
                
// получаем введённые данные
$email = $this->getRequest()->getPost('email');
$password = $this->getRequest()->getPost('password');
            
// подставляем полученные данные из формы
$authAdapter->setIdentity($email)
            ->setCredential($password);

// получаем экземпляр Zend_Auth
$auth = Zend_Auth::getInstance();

// делаем попытку авторизировать пользователя
$result = $auth->authenticate($authAdapter);

или ещё короче:
$authAdapter = new Zend_Auth_Adapter_DbTable(
    Zend_Db_Table::getDefaultAdapter(),
    'users', 'email', 'password', 'MD5(?)'
);

// получаем введённые данные
$email = $this->getRequest()->getPost('email');
$password = $this->getRequest()->getPost('password');
            
// подставляем полученные данные из формы
$authAdapter->setIdentity($email)
            ->setCredential($password);

// получаем экземпляр Zend_Auth
$auth = Zend_Auth::getInstance();

// делаем попытку авторизировать пользователя
$result = $auth->authenticate($authAdapter);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы