vendor/netgen/site-bundle/bundle/Security/Authorization/Voter/UserRegisterVoter.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Netgen\Bundle\SiteBundle\Security\Authorization\Voter;
  4. use Ibexa\Contracts\Core\Repository\PermissionResolver;
  5. use Ibexa\Core\MVC\Symfony\Security\Authorization\Attribute;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  10. /**
  11. * Provides access to ngsite_user_register route, even if user does not have access to user/login policy.
  12. */
  13. final class UserRegisterVoter implements VoterInterface
  14. {
  15. public function __construct(private PermissionResolver $permissionResolver, private RequestStack $requestStack) {}
  16. public function vote(TokenInterface $token, mixed $subject, array $attributes): int
  17. {
  18. foreach ($attributes as $attribute) {
  19. if (!$this->supportsAttribute($attribute)) {
  20. continue;
  21. }
  22. if ($this->permissionResolver->hasAccess('user', 'register') === true) {
  23. return VoterInterface::ACCESS_GRANTED;
  24. }
  25. return VoterInterface::ACCESS_DENIED;
  26. }
  27. return VoterInterface::ACCESS_ABSTAIN;
  28. }
  29. private function supportsAttribute(mixed $attribute): bool
  30. {
  31. if (!$attribute instanceof Attribute) {
  32. return false;
  33. }
  34. $request = $this->requestStack->getMainRequest();
  35. if (!$request instanceof Request) {
  36. return false;
  37. }
  38. if ($request->attributes->get('_route') !== 'ngsite_user_register') {
  39. return false;
  40. }
  41. return $attribute->module === 'user' && $attribute->function === 'login';
  42. }
  43. }