Witajcie,
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.