Преглед изворни кода

prevent cmf licence export for non cmf member

Olivier Massot пре 1 година
родитељ
комит
fdebf5c07a
2 измењених фајлова са 9 додато и 3 уклоњено
  1. 2 2
      doc/security.md
  2. 7 1
      src/State/Processor/Export/LicenceCmf/ExportRequestProcessor.php

+ 2 - 2
doc/security.md

@@ -88,11 +88,11 @@ Les voters permettent de contrôler l'accès à certaines ressources, selon le t
 
 Ils implémentent essentiellement deux méthodes : `supports` et `voteOnAttribute` qui prennent en paramètres la ressource 
 et le type d'opération. `supports` retourne `true` si le voter doit s'appliquer dans ce cas. Si oui, `voteOnAttribute`
-est appellée et retourne `true` si l'opération est autorisée.
+est appelée et retourne `true` si l'opération est autorisée.
 
 > TODO: quand faut-il retourner false et quand faut-il lever une AccessDeniedHttpException ?
 
-Pour qu'un Voter soit appellé, il faut configurer la sécurité de la ressource via son annotation et utiliser la méthode 
+Pour qu'un Voter soit appelé, il faut configurer la sécurité de la ressource via son annotation et utiliser la méthode 
 `is_granted` combinée à une des constantes : 
 
 Exemple : 

+ 7 - 1
src/State/Processor/Export/LicenceCmf/ExportRequestProcessor.php

@@ -11,6 +11,7 @@ use App\ApiResources\Export\ExportRequest;
 use App\Entity\Access\Access;
 use App\Entity\Core\File;
 use App\Message\Command\Export;
+use App\Service\Network\Utils as NetworkUtils;
 use App\Service\ServiceIterator\ExporterIterator;
 use Symfony\Bundle\SecurityBundle\Security;
 use Symfony\Component\HttpFoundation\Response;
@@ -21,7 +22,8 @@ class ExportRequestProcessor implements ProcessorInterface
     public function __construct(
         private Security $security,
         private MessageBusInterface $messageBus,
-        private ExporterIterator $handler
+        private ExporterIterator $handler,
+        private NetworkUtils $networkUtils
     ) {
     }
 
@@ -42,6 +44,10 @@ class ExportRequestProcessor implements ProcessorInterface
         $access = $this->security->getUser();
         $exportRequest->setRequesterId($access->getId());
 
+        if (!$this->networkUtils->isCMFAndActiveNow($access->getOrganization())) {
+            throw new \RuntimeException('This organization is not a member of the CMF', Response::HTTP_FORBIDDEN);
+        }
+
         // Prepare the file record and attach its id to the export request
         $exporter = $this->handler->getExporterFor($exportRequest);
         $file = $exporter->prepareFile($exportRequest, true);