OnAccessChange.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\OnChange\Access;
  4. use App\Entity\Access\Access;
  5. use App\Service\Access\AccessProfileCreator;
  6. use App\Service\MercureHub;
  7. use App\Service\OnChange\OnChangeContext;
  8. use App\Service\OnChange\OnChangeDefault;
  9. use Symfony\Bundle\SecurityBundle\Security;
  10. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  11. /**
  12. * Classe OnAccessChange qui comporte toutes les opérations automatiques se produisant lors de l'évolution d'un Access.
  13. */
  14. class OnAccessChange extends OnChangeDefault
  15. {
  16. public function __construct(
  17. private Security $security,
  18. private AccessProfileCreator $accessProfileCreator,
  19. private MercureHub $mercureHub,
  20. ) {
  21. }
  22. public function onChange(mixed $access, OnChangeContext $context): void
  23. {
  24. $this->publishNewProfile($access);
  25. }
  26. /**
  27. * Publie via mercure le nouveau profil de l'access.
  28. *
  29. * @throws \Exception
  30. */
  31. public function publishNewProfile(Access $access): void
  32. {
  33. $token = $this->security->getToken();
  34. /** @var ?Access $originalAccess */
  35. $originalAccess = $token instanceof SwitchUserToken ? $token->getOriginalToken()->getUser() : null;
  36. $profile = $this->accessProfileCreator->getAccessProfile($access, $originalAccess);
  37. $this->mercureHub->publishUpdate($access->getId(), $profile);
  38. }
  39. }