src/Security/Voter/TicketVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Admission\Cabinet\Entrant;
  4. use App\Entity\Admission\Tickets\TicketOperator;
  5. use App\Service\Admission\Tickets\AutomaticTicketManager;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class TicketVoter extends Voter
  10. {
  11.     const ATTRIBUTES = [
  12.         'GO_ONLINE',
  13.         'CHANGE_USER_ACTIVITY',
  14.         'CHANGE_ROLE_ADMIN',
  15.         'CAN_APPLY'
  16.     ];
  17.     private $automaticTicketManager;
  18.     public function __construct(AutomaticTicketManager $automaticTicketManager)
  19.     {
  20.         $this->automaticTicketManager $automaticTicketManager;
  21.     }
  22.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  23.     {
  24.         $user $token->getUser();
  25.         $ticketOperator $this->automaticTicketManager->getTicketOperator($user);
  26.         switch ($attribute) {
  27.             case 'GO_ONLINE':
  28.                 return $this->canChangeStatus($ticketOperator);
  29.                 break;
  30.             case 'CHANGE_ROLE_ADMIN':
  31.             case 'CHANGE_USER_ACTIVITY':
  32.                 return $this->canChangeUserActivity($user$subject);
  33.                 break;
  34.             case 'CAN_APPLY':
  35.                 return $this->canApply($user$subject);
  36.                 break;
  37.         }
  38.         return false;
  39.     }
  40.     protected function supports($attribute$subject)
  41.     {
  42.         if (in_array($attributeself::ATTRIBUTES)) {
  43.             return true;
  44.         }
  45.         return false;
  46.     }
  47.     protected function canApply($user$application)
  48.     {
  49.         if ($user instanceof Entrant) {
  50.             if ($user->getApplications()->contains($application)) {
  51.                 return true;
  52.             }
  53.         }
  54.         return false;
  55.     }
  56.     protected function canChangeStatus($ticketOperator)
  57.     {
  58.         if ($ticketOperator) {
  59.             return $ticketOperator instanceof TicketOperator;
  60.         }
  61.         return false;
  62.     }
  63.     protected function canChangeUserActivity($user$subject)
  64.     {
  65.         if ($subject instanceof UserInterface) {
  66.             return !($subject->getId() == $user->getId());
  67.         }
  68.         return true;
  69.     }
  70. }