/** * Add user info for request * * @param GetResponseEvent $request */ public function onKernelRequest(GetResponseEvent $request) { $token = $this->tokenStorage->getToken(); $user = null; if (!is_null($token)) { $user = $token->getUser(); } $this->xacmlRequest->set($this->category, $user); }
/** * Add resource information for request from annotations * * @param GetResponseEvent $request */ public function onKernelRequest(GetResponseEvent $request) { $controller = $request->getRequest()->get('_controller'); $controllerParts = explode('::', $controller); if (is_array($controllerParts) && count($controllerParts) == 2) { $class = $controllerParts[0]; $method = $controllerParts[1]; $object = new \ReflectionMethod($class, $method); $resources = []; foreach ($this->annotationsReader->getMethodAnnotations($object) as $configuration) { if ($configuration instanceof XacmlResource) { $baseClassName = $this->getBaseClassName($configuration->entity); $resources[$baseClassName] = new Resource($configuration->entity, $request->getRequest()->get($configuration->id), $configuration->method); $resources['type'] = $baseClassName; } } if (!empty($resources)) { $this->xacmlRequest->set($this->category, $resources); } } }
/** * Retrieve value by attributeId from request context * * @param XacmlRequest $request * @param string $attributeId * @return mixed * @throws \Exception */ public function getValue(XacmlRequest $request, $attributeId) { $attributeParts = explode('.', trim($attributeId)); $array = []; foreach ($attributeParts as $key => $attributePart) { //First check Category - top level in XacmlRequest if ($key === 0) { $array = $request->get($attributePart); if (empty($array)) { //Check if attribute part is Resource $array = $request->get('Resource'); if (!empty($array) && isset($array[$attributePart])) { if ($array[$attributePart] instanceof XacmlResource) { /** @var XacmlResource $resource */ $resource = $array[$attributeParts[0]]; $array = $this->getEntity($resource); } elseif (is_object($array[$attributePart])) { $array = $array[$attributePart]; } } } if (empty($array)) { throw new \Exception("Attribute {$attributeId} not found"); } continue; } if (is_array($array) && isset($array[$attributePart])) { $array = $array[$attributePart]; } elseif (is_object($array)) { $getter = $this->getGetter($attributePart); $array = $array->{$getter}(); } else { throw new \Exception("Attribute {$attributeId} not found"); } } return $array; }
public function evaluate(XacmlRequest $request) { $action = $request->get('Action'); //Error pages not have Action name /** * Permit access to: * - Error pages with empty Action name * - Actions for debug, started with "_" */ if (empty($action) || substr($action, 0, 1) === '_') { return Decision::PERMIT; } $policies = $this->em->getRepository(PolicySet::class)->findNotLinkedPolicySets(); if (empty($policies)) { $policies = $this->em->getRepository(Policy::class)->findNotLinkedPolicies(); } if (!empty($policies)) { $result = $this->combiningAlgorithmRegistry->get($this->combiningAlgId)->evaluate($request, $policies); if (in_array($result, [Decision::PERMIT, Decision::DENY])) { return $result; } } return $this->defaultDecision; }
/** * Add environment information for request * * @param GetResponseEvent $request */ public function onKernelRequest(GetResponseEvent $request) { $dateTime = new \DateTime(); $this->xacmlRequest->set($this->category, ['ip' => $request->getRequest()->getClientIp(), 'date_time' => $dateTime->format('Y-m-d H:i:s')]); }
/** * Add route name for request * * @param GetResponseEvent $request */ public function onKernelRequest(GetResponseEvent $request) { $this->xacmlRequest->set($this->category, $request->getRequest()->get('_route')); }