/** * 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; }
public function afterDispatchLoop(Event $event, Dispatcher $dispatcher) { $di = $this->getDI(); $response = $di->get('response'); $content = $response->getContent(); if ($content === '' && $dispatcher->getActiveController() instanceof RestControllerInterface) { $returnedResponse = $dispatcher->getReturnedValue() instanceof ResponseInterface; if ($returnedResponse === false) { /** @var \PhalconRest\Mvc\RestView $rest */ $rest = $di->get('rest'); /** @var Manager $eventsManager */ $eventsManager = $this->_eventsManager; //$eventsManager = $dispatcher->getDI()->get('eventsManager'); $renderStatus = true; if ($eventsManager instanceof ManagerInterface) { $renderStatus = $eventsManager->fire('application:viewRender', $this, $rest); } if ($renderStatus) { $rest->render($dispatcher->getControllerName(), $dispatcher->getActionName()); $content = $rest->getContent(); } /** @var \Phalcon\Http\Response $response */ $response = $di->get('response'); $response->setContent($content)->send(); } } }
/** * beforeExecuteRoute * @param \Phalcon\Events\Event $event * @param \Phalcon\Mvc\Dispatcher $dispatcher * @return bool|Response * @throws \Phalcon\Exception */ public function beforeExecuteRoute($event, $dispatcher) { $controller = $dispatcher->getActiveController(); $result = $controller->beforeAction(); if ($result instanceof Response) { return $result->send(); } elseif ($result === false) { $exception = $controller->getException(); if (!is_null($exception)) { throw $exception; } } return true; }