src/Bidcoz/Bundle/CoreBundle/Security/Authorization/Voter/HiddenCampaignVoter.php line 18

Open in your IDE?
  1. <?php
  2. namespace Bidcoz\Bundle\CoreBundle\Security\Authorization\Voter;
  3. use Bidcoz\Bundle\CoreBundle\Entity\Campaign;
  4. use Bidcoz\Bundle\CoreBundle\Services\OrganizationManager;
  5. use Bidcoz\Bundle\CoreBundle\Services\PermissionManager;
  6. use RS\DiExtraBundle\Annotation as DI;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  10. use Symfony\Component\Security\Core\User\UserInterface;
  11. /**
  12.  * @DI\Service
  13.  * @DI\Tag("security.voter")
  14.  */
  15. class HiddenCampaignVoter extends Voter
  16. {
  17.     public const FRONT_END 'FRONT_END';
  18.     protected OrganizationManager $organizationManager;
  19.     protected PermissionManager $permissionManager;
  20.     private RequestStack $requestStack;
  21.     /**
  22.      * @DI\InjectParams({
  23.      *     "organizationManager" = @DI\Inject("organization_manager"),
  24.      *     "permissionManager" = @DI\Inject("permission_manager"),
  25.      *     "requestStack" = @DI\Inject("request_stack")
  26.      * })
  27.      */
  28.     public function __construct(
  29.         OrganizationManager $organizationManager,
  30.         PermissionManager $permissionManager,
  31.         RequestStack $requestStack
  32.     )
  33.     {
  34.         $this->organizationManager $organizationManager;
  35.         $this->permissionManager $permissionManager;
  36.         $this->requestStack $requestStack;
  37.     }
  38.     protected function supports($attribute$subject)
  39.     {
  40.         return $subject instanceof Campaign && self::FRONT_END === $attribute;
  41.     }
  42.     protected function voteOnAttribute($attribute$campaignTokenInterface $token)
  43.     {
  44.         /** @var $campaign Campaign */
  45.         if (!$campaign->isHidden()) {
  46.             return true;
  47.         }
  48.         $route $this->requestStack->getMainRequest() ? $this->requestStack->getMainRequest()->get('_route') : null;
  49.         if ('campaign_register_user' === $route) {
  50.             return true;
  51.         }
  52.         $user $token->getUser();
  53.         // If the user isn't logged in, denied
  54.         if (!$user instanceof UserInterface) {
  55.             return false;
  56.         }
  57.         if ($user->hasRole('ROLE_SUPER_ADMIN')) {
  58.             return true;
  59.         }
  60.         if ($this->organizationManager->isOrganizationAdmin($campaign->getOrganization(), $user)) {
  61.             return true;
  62.         }
  63.         $memberships $this
  64.             ->permissionManager
  65.             ->getUserGroupMembershipForCampaign($campaign$user);
  66.         // allow access to any user that has any permissions
  67.         return count($memberships) > 0;
  68.     }
  69. }