src/Security/Voter/PurchaseVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Purchase;
  4. use App\Entity\PurchaseAPOD;
  5. use App\Entity\PurchaseEtsy;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\Security;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. class PurchaseVoter extends Voter
  11. {
  12. public const EDIT = 'purchase_edit';
  13. public function __construct(
  14. private Security $security,
  15. ) {
  16. }
  17. protected function supports(string $attribute, mixed $subject): bool
  18. {
  19. return $attribute == self::EDIT && $subject instanceof Purchase;
  20. }
  21. protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
  22. {
  23. $user = $token->getUser();
  24. // if the user is anonymous, do not grant access
  25. if (!$user instanceof UserInterface) {
  26. return false;
  27. }
  28. /** @var Purchase $purchase */
  29. $purchase = $subject;
  30. if (
  31. ($purchase instanceof PurchaseEtsy && $purchase->getUserStore()->getUser() === $user) ||
  32. ($purchase instanceof PurchaseAPOD && $purchase->getUser() === $user) ||
  33. $this->security->isGranted('ROLE_ADMIN')
  34. ) {
  35. return true;
  36. }
  37. return false;
  38. }
  39. }