requestedRight; $requestedRight->setSource($source); return $requestedRight; } /** * @return SourceInterface */ private function loadSource(): SourceInterface { try { return $this->sourceRepository->find($this->requestedRight->getSource()->getId()); } catch (\Error $error) { return $this->sourceRepository->findOneBySlug($this->requestedRight->getSource()->getSlug()); } } public function __construct(EntityManagerInterface $entityManager, RightInterface $requestedRight) { $this->sourceRepository = $entityManager->getRepository(AbstractSource::class); $this->requestedRight = $requestedRight; } /** * {@inheritdoc} * * @see \App\Domain\SecureLoadManagement\SecureSourceLoaderInterface::getSource() */ public function getSource(): SourceInterface { $source = $this->loadSource(); $requestedRight = $this->getClonedRightWithModifiedSource($source); $secureSourceChecker = new SecureSourceChecker($source); if ($secureSourceChecker->hasPermission($requestedRight)) { return $source; } throw new SourceAccessDenied(); } }