diff --git a/application/controllers/plugins/Acl_plugin.php b/application/controllers/plugins/Acl_plugin.php index ed607835c..2587d2501 100644 --- a/application/controllers/plugins/Acl_plugin.php +++ b/application/controllers/plugins/Acl_plugin.php @@ -109,29 +109,53 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract **/ public function preDispatch(Zend_Controller_Request_Abstract $request) { - if (Zend_Auth::getInstance()->hasIdentity()){ - $userInfo = Zend_Auth::getInstance()->getStorage()->read(); - $this->setRoleName($userInfo->type); + $controller = strtolower($request->getControllerName()); + + if (!Zend_Auth::getInstance()->hasIdentity()){ + + if ($controller !== 'login') { + + if ($request->isXmlHttpRequest()) { + + $url = 'http://'.$request->getHttpHost().'/login'; + $json = Zend_Json::encode(array('auth' => false, 'url' => $url)); + + // Prepare response + $this->getResponse() + ->setHttpResponseCode(401) + ->setBody($json) + ->sendResponse(); + + //redirectAndExit() cleans up, sends the headers and stops the script + Zend_Controller_Action_HelperBroker::getStaticHelper('redirector')->redirectAndExit(); + } + else { + $r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); + $r->gotoSimpleAndExit('index', 'login', $request->getModuleName()); + } + } } else { - $this->_roleName = "guest"; + + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $this->setRoleName($userInfo->type); + + Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($this->_roleName); + + $resourceName = ''; + + if ($request->getModuleName() != 'default') { + $resourceName .= strtolower($request->getModuleName()) . ':'; + } + + $resourceName .= $controller; + + /** Check if the controller/action can be accessed by the current user */ + if (!$this->getAcl()->isAllowed($this->_roleName, $resourceName, $request->getActionName())) { + /** Redirect to access denied page */ + $this->denyAccess(); + } } - - Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($this->_roleName); - - $resourceName = ''; - - if ($request->getModuleName() != 'default') { - $resourceName .= strtolower($request->getModuleName()) . ':'; - } - - $resourceName .= strtolower($request->getControllerName()); - - /** Check if the controller/action can be accessed by the current user */ - if (!$this->getAcl()->isAllowed($this->_roleName, $resourceName, $request->getActionName())) { - /** Redirect to access denied page */ - $this->denyAccess(); - } } /**