Ejemplo n.º 1
0
 /**
  * To zdarzenie jest wywoływane przed wykonaniem każdego routingu w dispatcherze
  */
 public function beforeExecuteRoute(\Phalcon\Events\Event $event, \Phalcon\Mvc\Dispatcher $dispatcher)
 {
     $controller = get_class($dispatcher->getActiveController());
     $action = $dispatcher->getActiveMethod();
     // Wyłuskaj adnotacje przypisane do bieżącego kontrolera:
     $annotations['controller'] = $this->annotations->get($controller)->getClassAnnotations();
     // Wyłuskaj adnotacje przypisane do bieżącej akcji:
     $annotations['action'] = $this->annotations->getMethod($controller, $action);
     $roles = [];
     /**
      * @var \Phalcon\Annotations\Collection $collection
      */
     foreach ($annotations as $key => $collection) {
         if ($collection instanceof \Phalcon\Annotations\Collection and $collection->has(self::ANNOTATION_NAME)) {
             $roles[$key] = $collection->get(self::ANNOTATION_NAME)->getArguments();
         }
     }
     // Jeżeli nie ma żadnych zabezpieczeń lub akcja nie jest zabezpieczona:
     if (count($roles) === 0 or array_key_exists('action', $roles) and in_array(\Application\Common\User::NOT_SECURED, $roles['action'])) {
         return true;
     }
     $required = [];
     // Tworzenie listy wymaganych ról dla danej akcji - adnotacje akcji mają wyższy priorytet niż adnotacje kontrolera:
     if (array_key_exists('action', $roles)) {
         $required = $roles['action'];
     } else {
         if (false == in_array(\Application\Common\User::NOT_SECURED, $roles['controller'])) {
             $required = $roles['controller'];
         }
     }
     $access = false;
     foreach ($required as $role) {
         if ($this->getDI()->getUser()->isGranted($role)) {
             $access = true;
             break;
         }
     }
     if ($access === false) {
         // If user is logged in and tries to access forbiden page:
         if ($this->getDI()->getUser()->isAuthenticated() and $controller !== '\\Application\\Common\\Controller\\Error') {
             return $dispatcher->getActiveController()->response->redirect(['for' => 'error.access_forbiden']);
         } else {
             $route = $dispatcher->getActiveController()->router->getMatchedRoute()->getName();
             $params = $dispatcher->getActiveController()->router->getParams();
             $this->getDI()->getSession()->set('$PHALCON/REQUIRED_URL$', ['for' => $route] + $params);
             return $dispatcher->getActiveController()->response->redirect(['for' => 'user.sign_in']);
         }
     }
     return true;
 }
 private function pathFinder($strMedia, $intMajorVersion, $intMinorVersion)
 {
     $strReturn = '';
     $oLogger = $this->_di->getFileLogger();
     //		$oChecker = new Checker();
     $strBaseDir = __DIR__ . DIRECTORY_SEPARATOR . $strMedia . DIRECTORY_SEPARATOR . 'v' . $intMajorVersion . '_';
     $intMinorVersion = (int) $intMinorVersion;
     for ($i = $intMinorVersion; $i >= 0; $i--) {
         $strDir = $strBaseDir . $intMinorVersion . DIRECTORY_SEPARATOR . 'controllers';
         $oChecker = new Checker($strDir, $this->dispatcher->getControllerClass());
         if ($oChecker->methodExists($this->dispatcher->getActiveMethod())) {
             $oLogger->debug(__CLASS__ . '->' . __FUNCTION__ . ':: ' . $this->dispatcher->getControllerClass() . '->' . $this->dispatcher->getActiveMethod() . ' lays in ' . $strDir);
             $strReturn = $strDir;
             break;
         } else {
             $oLogger->debug(__CLASS__ . '->' . __FUNCTION__ . ':: ' . $this->dispatcher->getControllerClass() . '->' . $this->dispatcher->getActiveMethod() . ' not found in ' . $strDir);
         }
         //			if($strTokens = $oChecker->classExists($strDir, $this->dispatcher->getControllerClass())){
         //
         //				$oLogger->debug('tokens: ' . $strTokens);
         //			}
     }
     return $strReturn;
 }