Вы должны использовать Zend_Auth для аутентификации.
Подробнее об этом вы можете прочитать здесь: manual.zfdes.com/de/zend.auth.html
Вот как я использовал Zend_Auth:
$auth = Zend_Auth::getInstance();
$authAdapter = new Altergear_Seolista_UserLoginAuthAdapter(
$loginForm->getLogin(),
$loginForm->getPassword()
);
$result = $auth->authenticate($authAdapter);
Аутентификационный адаптер возвращает новый Zend_Auth_Result с новым идентификатором. Для них я использую объект stdClass. Он заменит старую идентичность.
Вот мой адаптер в качестве примера
<?php
use Doctrine \ ORM \ EntityManager;
Класс Altergear_MyApp_UserLoginAuthAdapter реализует Zend_Auth_Adapter_Interface
{
/ **
* Логин
* @var строка $ _login
* /
личное $ _login;
/**
* The user password
* @var string $_password
*/
private $_password;
/**
* The Doctrine EntityManager
* @var EntityManager $_em
*/
private $_em;
public function __construct( $email, $password )
{
$registry = Zend_Registry::getInstance();
$this->_em = $registry->entitymanager;
$this->_login = $email;
$this->_password = $password;
}
/**
* Executes an authentication try
*
* @throws Zend_Auth_Adapter_Exception if the authentication failed
* @return Zend_Auth_Result
*/
public function authenticate()
{
//check if login is correct
try{
$user = $this->_em->getRepository('App_Model_User')
->findOneBy(
array(
'_email' => $this->_login,
'_password' => App_Model_User::encodePassword( $this->_password )
)
);
}catch( Exception $e ){
throw new Zend_Auth_Adapter_Exception( 'authentication failed', 0, $e );
}
if( $user!==null && $user instanceof App_Model_User && $user->getId() > 0 )
{
//login successful
$identity = new stdClass();
$identity->user = $user;
return new Zend_Auth_Result( Zend_Auth_Result::SUCCESS , $identity );
}else{
//login failed
return new Zend_Auth_Result( Zend_Auth_Result::FAILURE, NULL, array('Bitte geben Sie gültige Logindaten an.') );
}
Кроме того, вы можете работать с Zend_Acl. Я рекомендую вам подключаемый модуль Zend_Controller для управления доступом к вашим контроллерам и действиям.