AdminAccessProvider.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\State\Provider\Access;
  4. use ApiPlatform\Metadata\GetCollection;
  5. use ApiPlatform\Metadata\Operation;
  6. use ApiPlatform\State\ProviderInterface;
  7. use App\ApiResources\Access\AdminAccess;
  8. use App\Entity\Access\Access;
  9. use App\Service\Access\AdminAccessUtils;
  10. use Exception;
  11. use RuntimeException;
  12. use Symfony\Bundle\SecurityBundle\Security;
  13. /**
  14. * Class AdminAccessProvider : custom provider pour la resource AdminAccess
  15. * @package App\DataProvider\Access
  16. */
  17. final class AdminAccessProvider implements ProviderInterface
  18. {
  19. public function __construct(
  20. private Security $security,
  21. private AdminAccessUtils $adminAccessUtils
  22. )
  23. { }
  24. /**
  25. * @param Operation $operation
  26. * @param mixed[] $uriVariables
  27. * @param mixed[] $context
  28. * @return AdminAccess|null
  29. * @throws Exception
  30. */
  31. public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?AdminAccess
  32. {
  33. if($operation instanceof GetCollection) {
  34. throw new RuntimeException('not supported', 500);
  35. }
  36. /** @var Access $access */
  37. $access = $this->security->getUser();
  38. return $this->adminAccessUtils->getAdminAccess($access->getOrganization());
  39. }
  40. }