public function preDispatch(Zend_Controller_Request_Abstract $request) { if (Zend_Controller_Front::getInstance()->getDispatcher()->isDispatchable($request)) { //Retrieve acl $frontendOptions = array('lifetime' => null, 'automatic_serialization' => true); $backendOptions = array('cache_dir' => APPLICATION_PATH . '/../cache/'); $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); if ($aclFromCache = $cache->load('acl')) { $acl = $aclFromCache; } else { $acl = $this->_buildAcl(); $cache->save($acl, 'acl'); } //Set acl to registry for menus //Zend_Registry::set('gfiAcl', $acl); $redirector = new Zend_Controller_Action_Helper_Redirector(); //Detect role id $roleId = My_Acl::detectRoleId(); //Get resources parts names if ($request->getModuleName()) { $moduleName = $request->getModuleName(); } else { $moduleName = 'default'; } $controllerName = $request->getControllerName(); $actionName = $request->getActionName(); //Redirect logged in user from login and reset password forms if ($roleId !== My_Acl::GUEST_ROLE_Id && ($moduleName === 'Users' && $controllerName === 'auth' && $actionName === 'login' || $moduleName === 'Users' && $controllerName === 'auth' && $actionName === 'register')) { $redirector->gotoRoute(array(), 'home'); } //Redirect not allowed if (!$acl->canAccess($roleId, $moduleName, $controllerName, $actionName)) { $request->setModuleName('Users'); $request->setControllerName('auth'); $request->setActionName('login'); $request->setParam('accessDenied', true); } } }