/** * * @param string $route * @return boolean|RouteMatch */ private function checkRoute($route) { $request = new Request(); $request->setMethod(Request::METHOD_GET); $request->setUri($route); try { $match = $this->router->match($request); return isset($match) ? $match : false; } catch (\Exception $e) { return false; } return false; }
/** * @return string|null */ public function resolve() { if (!$this->request instanceof HttpRequest) { return; } $routeMatch = $this->router->match($this->request); if (!$routeMatch) { return; } $matchedRouteName = $routeMatch->getMatchedRouteName(); foreach ($this->config['wizards'] as $name => $options) { if (empty($options['route'])) { continue; } if (is_string($options['route'])) { $options['route'] = [$options['route']]; } if (!in_array($matchedRouteName, $options['route'])) { continue; } return $name; } }
/** * @param MvcEvent $event * @param Request $request * @param Response $response * @param FlashMessenger $flashMessenger * @param RouteInterface $router * @param Translator $translator * * @return bool */ public function checkAcl(MvcEvent $event, Request $request, Response $response, FlashMessenger $flashMessenger, RouteInterface $router, Translator $translator) { $role = $this->guestRoleName; if ($this->auth->hasIdentity()) { $role = $this->auth->getIdentity()->getRole(); if (!in_array($role, $this->allowedRoles)) { $role = $this->guestRoleName; } } $matchedRoute = $this->router->match($request); if (is_null($matchedRoute)) { return; } $params = $matchedRoute->getParams(); $module = array_key_exists('__NAMESPACE__', $params) ? $params['__NAMESPACE__'] : null; $controller = array_key_exists('controller', $params) ? $params['controller'] : null; $action = array_key_exists('action', $params) ? $params['action'] : null; if ($module && $controller) { $module .= '.'; } if ($action) { $controller .= '.'; } $resource = str_replace('\\Controller', '', $module) . $controller . $action; $resource = strtolower(str_replace('\\', '.', $resource)); if ($controller) { unset($params['controller']); } if ($action) { unset($params['action']); } if ($module) { unset($params['__NAMESPACE__']); } if (!$this->hasResource($resource)) { return true; if ($role == $this->guestRoleName) { $url = $router->assemble([], ['name' => 'aclGuestResourceNotFound']); } else { $url = $router->assemble([], ['name' => 'aclUserResourceNotFound']); } if (DEBUG) { $flashMessenger->addErrorMessage(sprintf($translator->translate('The requested resource %s does not exist'), $resource)); } else { $flashMessenger->addErrorMessage($translator->translate('The requested resource does not exist')); } $response->setStatusCode(302); if (DEBUG) { echo '<div style="margin:150px auto; width: 50%; text-align:center; font-size:18px;"><h3>DEBUG IS ENABLED' . '</h3><br />Normally would auto-redirect to:<br /><br /><a style="font-size:24px;" href="' . $url . '">' . $url . '</a>'; echo '</div>'; die; } header('location: ' . $url); $event->stopPropagation(); $event->setError('x'); return; } if (!$this->isAllowed($role, $resource)) { if (DEBUG) { $flashMessenger->addErrorMessage(sprintf($translator->translate('You (%s) are not allowed to access this resource: %s'), $role, $resource)); } else { $flashMessenger->addErrorMessage($translator->translate('You are not allowed to access this resource')); } if ($role == $this->guestRoleName) { $url = $router->assemble([], ['name' => 'aclGuestNotAllowed']); } else { $url = $router->assemble([], ['name' => 'aclUserNotAllowed']); } $response->setStatusCode(302); if (DEBUG) { echo '<div style="margin:150px auto; width: 50%; text-align:center; font-size:18px;"><h3>DEBUG IS ENABLED' . '</h3><br />Normally would auto-redirect to:<br /><br /><a style="font-size:24px;" href="' . $url . '">' . $url . '</a>'; echo '</div>'; die; } header('location: ' . $url); $event->stopPropagation(); $event->setError('x'); return; } return true; }