Esempio n. 1
0
 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);
         }
     }
 }