vendor/ezsystems/ezplatform-kernel/eZ/Publish/Core/Repository/Permission/LimitationService.php line 22

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace eZ\Publish\Core\Repository\Permission;
  8. use eZ\Publish\API\Repository\Values\User\Limitation;
  9. use eZ\Publish\Core\Base\Exceptions\NotFound\LimitationNotFoundException;
  10. use eZ\Publish\Core\Base\Exceptions\BadStateException;
  11. use eZ\Publish\SPI\Limitation\Type;
  12. use Traversable;
  13. /**
  14.  * Internal service to deal with limitations and limitation types.
  15.  *
  16.  * @internal Meant for internal use by Repository.
  17.  */
  18. class LimitationService
  19. {
  20.     /** @var \eZ\Publish\SPI\Limitation\Type[] */
  21.     private $limitationTypes;
  22.     public function __construct(?Traversable $limitationTypes null)
  23.     {
  24.         $this->limitationTypes null !== $limitationTypes
  25.             iterator_to_array($limitationTypes) :
  26.             [];
  27.     }
  28.     /**
  29.      * Returns the LimitationType registered with the given identifier.
  30.      *
  31.      * Returns the correct implementation of API Limitation value object
  32.      * based on provided identifier
  33.      *
  34.      * @throws \eZ\Publish\Core\Base\Exceptions\NotFound\LimitationNotFoundException
  35.      */
  36.     public function getLimitationType(string $identifier): Type
  37.     {
  38.         if (!isset($this->limitationTypes[$identifier])) {
  39.             throw new LimitationNotFoundException($identifier);
  40.         }
  41.         return $this->limitationTypes[$identifier];
  42.     }
  43.     /**
  44.      * Validates an array of Limitations.
  45.      *
  46.      * @param \eZ\Publish\API\Repository\Values\User\Limitation[] $limitations
  47.      *
  48.      * @return \eZ\Publish\SPI\FieldType\ValidationError[][]
  49.      *
  50.      * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException
  51.      * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
  52.      */
  53.     public function validateLimitations(array $limitations): array
  54.     {
  55.         $allErrors = [];
  56.         foreach ($limitations as $limitation) {
  57.             $errors $this->validateLimitation($limitation);
  58.             if (!empty($errors)) {
  59.                 $allErrors[$limitation->getIdentifier()] = $errors;
  60.             }
  61.         }
  62.         return $allErrors;
  63.     }
  64.     /**
  65.      * Validates single Limitation.
  66.      *
  67.      * @return \eZ\Publish\SPI\FieldType\ValidationError[]
  68.      *
  69.      * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException If the Role settings is in a bad state*@throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
  70.      * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
  71.      */
  72.     public function validateLimitation(Limitation $limitation): array
  73.     {
  74.         $identifier $limitation->getIdentifier();
  75.         if (!isset($this->limitationTypes[$identifier])) {
  76.             throw new BadStateException(
  77.                 '$identifier',
  78.                 "limitationType[{$identifier}] is not configured"
  79.             );
  80.         }
  81.         $type $this->limitationTypes[$identifier];
  82.         // This will throw if it does not pass
  83.         $type->acceptValue($limitation);
  84.         // This return array of validation errors
  85.         return $type->validate($limitation);
  86.     }
  87. }