src/Security/EntityVoters/PlacementPageSetupVoter.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Security\EntityVoters;
  3. use ApiPlatform\Core\Api\IriConverterInterface;
  4. use App\Entity\PlacementPageSetup;
  5. use Exception;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\Routing\RouterInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  10. use Symfony\Component\Security\Core\Security;
  11. use ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator;
  12. class PlacementPageSetupVoter extends EntityVoter
  13. {
  14.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  15.     {
  16.         $user $token->getUser();
  17.         if ($user && $user->getRole()->getName() === 'ROLE_SUPER_ADMIN')
  18.             return true;
  19.         switch ($attribute)
  20.         {
  21.             case 'GET_COLLECTION':
  22.                 return true;
  23.             case 'GET':
  24.                 if (!$user)
  25.                     return true;
  26.                 return $this->checkUserPermissions($user$subject);
  27.             case 'PATCH':
  28.             case 'DELETE':
  29.             case 'PUT':
  30.                 return $this->checkUserPermissions($user$subject);
  31.             case 'POST':
  32.                 if (!$user)
  33.                     return false;
  34.                 return true;
  35.             case 'POST_DENORMALIZE':
  36.                 return $this->isAllowedPost($user$subject);
  37.         }
  38.         return false;
  39.     }
  40.     private function checkUserPermissions($userPlacementPageSetup $subject): bool {
  41.         if (!$user)
  42.             return false;
  43.         if ($subject->getIsDefault())
  44.             return false;
  45.         if ($subject->isUserHasAccess($user))
  46.             return true;
  47.         return false;
  48.     }
  49.     private function isAllowedPost($userPlacementPageSetup $subject): bool {
  50.         if (!$user)
  51.             return false;
  52.         if ($subject->getPlacementType()->isUserHasAccess($user))
  53.             return true;
  54.         return false;
  55.     }
  56.     protected function getVoteEntityClass(): string
  57.     {
  58.         return PlacementPageSetup::class;
  59.     }
  60. }