attributes->get('_api_resource_class') || !$resourceMetadata = $this->resourceMetadataFactory->create($subject->attributes->get('_api_resource_class'))) { throw new AccessDeniedHttpException(sprintf('Missing resource class')); } if ($token instanceof NullToken) { return false; } $module = $this->module->getModuleByResourceName($resourceMetadata->getShortName()); //Check if there is a module for this entity : eq configuration problem if (null === $module) { throw new AccessDeniedHttpException(sprintf('There are no module for the entity (%s) !', $resourceMetadata->getShortName())); } /** @var Access $currentAccess */ $currentAccess = $token->getUser(); /** @var Organization $organization */ $organization = $currentAccess->getOrganization(); if (!$this->isOrganizationHaveThisModule($organization, $module)) { throw new AccessDeniedHttpException( sprintf("The organization doesn't have the module '%s'", $module) ); } return true; } /** * Test si l'organisation possède le module parmis les modules possédés via le produit souscrit, les options souscrites * ou les modules possédées via des conditions particulières (isCmf par exemple) * * @param Organization $organization * @param string $module * @return bool */ private function isOrganizationHaveThisModule(Organization $organization, string $module): bool{ $organizationModules = $this->module->getOrganizationModules($organization); return in_array($module, $organizationModules); } }