mam pewną zagwozdkę.
Chcę utworzyć w jednym projekcie dwa interfejsy admina i usera przy użyciu zend auth.
Ok, tworze dwa osobne kontrolery dla usera i admina, wszystko działa. User sie loguje do swojego panelu, admin do swojego - praktycznie działa w 90%
Pojawił się problem. Jeżeli zalogujemy się na admina, nastepnie nie wylogujemy się ze swojego profilu, to możemy wejść na profil usera. Podobnie jest w drugą stronę... a to poważny bląd.
Czy istnieje jakieś rozwiązanie w zend aby rozdzielić zend auth dla usera i admina ?
Dla usera i admina zastosowałem w kontrolerze takie rozwiązanie:
class AuthController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { $form = new Application_Form_Login(); $request = $this->getRequest(); if ($request->isPost()) { if ($form->isValid($request->getPost())) { if ($this->_process($form->getValues())) { $this->_helper->redirector('index', 'index'); } else { $this->view->blad = 'Błędne dane'; } } } $this->view->form = $form; } protected function _process($values) { // Get our authentication adapter and check credentials $adapter = $this->_getAuthAdapter(); $adapter->setIdentity($values['username']); $adapter->setCredential($values['password']); $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($adapter); if ($result->isValid()) { $user = $adapter->getResultRowObject(); $auth->getStorage()->write($user); return true; } return false; } protected function _getAuthAdapter() { $dbAdapter = Zend_Db_Table::getDefaultAdapter(); $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); $authAdapter->setTableName('system_customers') ->setIdentityColumn('username') ->setCredentialColumn('password') ->setCredentialTreatment('SHA1(CONCAT(?,salt))'); return $authAdapter; } public function logoutAction() { Zend_Auth::getInstance()->clearIdentity(); return $this->_redirect('/'); } }
Proszę o pomoc.