src/Voter/__Booking/BookingBookingVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Voter\__Booking;
  3. use App\Entity\Booking\Booking;
  4. use App\Entity\User\User;
  5. use App\Repository\User\UserRepository;
  6. use App\Voter\VoterTrait;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. class BookingBookingVoter extends Voter
  11. {
  12.     use VoterTrait;
  13.     const LIST = "BOOKING_BOOKING_LIST";
  14.     const DETAILS_STATUS "BOOKING_BOOKING_DETAILS_STATUS";
  15.     const DETAILS_BASE "BOOKING_BOOKING_DETAILS_BASE";
  16.     const DETAILS_CABIN "BOOKING_BOOKING_DETAILS_CABIN";
  17.     const DETAILS_PARTICIPANT "BOOKING_BOOKING_DETAILS_PARTICIPANT";
  18.     const DETAILS_FORMALITY "BOOKING_BOOKING_DETAILS_FORMALITY";
  19.     const DETAILS_TOTAL "BOOKING_BOOKING_DETAILS_TOTAL";
  20.     const DETAILS_EMAIL "BOOKING_BOOKING_DETAILS_EMAIL";
  21.     const DETAILS_TURNOVER "BOOKING_BOOKING_DETAILS_TURNOVER";
  22.     const DETAILS_SELLER_BONUS "BOOKING_BOOKING_DETAILS_SELLER_BONUS";
  23.     protected function supports($attribute$subject): bool
  24.     {
  25.         return in_array($attribute, [
  26.                 self::LIST,
  27.                 self::DETAILS_STATUS,
  28.                 self::DETAILS_BASE,
  29.                 self::DETAILS_CABIN,
  30.                 self::DETAILS_PARTICIPANT,
  31.                 self::DETAILS_FORMALITY,
  32.                 self::DETAILS_TOTAL,
  33.                 self::DETAILS_EMAIL,
  34.                 self::DETAILS_TURNOVER,
  35.                 self::DETAILS_SELLER_BONUS,
  36.             ]) && ($subject === null || $subject instanceof Booking);
  37.     }
  38.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  39.     {
  40.         $loggedUser $token->getUser();
  41.         if (!$loggedUser instanceof UserInterface) {
  42.             return false;
  43.         }
  44.         if ($attribute !== self::LIST && $subject === null) {
  45.             return false;
  46.         }
  47.         switch ($attribute) {
  48.             case self::LIST:
  49.                 return $this->voteOnList($loggedUser);
  50.             case self::DETAILS_STATUS:
  51.                 return $this->voteOnDetailsStatus($subject$loggedUser);
  52.             case self::DETAILS_BASE:
  53.                 return $this->voteOnDetailsBase($subject$loggedUser);
  54.             case self::DETAILS_CABIN:
  55.                 return $this->voteOnDetailsCabin($subject$loggedUser);
  56.             case self::DETAILS_PARTICIPANT:
  57.                 return $this->voteOnDetailsParticipant($subject$loggedUser);
  58.             case self::DETAILS_FORMALITY:
  59.                 return $this->voteOnDetailsFormality($subject$loggedUser);
  60.             case self::DETAILS_TOTAL:
  61.                 return $this->voteOnDetailsTotal($subject$loggedUser);
  62.             case self::DETAILS_EMAIL:
  63.                 return $this->voteOnDetailsEmail($subject$loggedUser);
  64.             case self::DETAILS_TURNOVER:
  65.                 return $this->voteOnDetailsTurnover($subject$loggedUser);
  66.             case self::DETAILS_SELLER_BONUS:
  67.                 return $this->voteOnDetailsSellerBonus($subject$loggedUser);
  68.         }
  69.         return false;
  70.     }
  71.     private function voteOnList(UserInterface $loggedUser): bool
  72.     {
  73.         return in_array(self::LIST, $loggedUser->getRoles());
  74.     }
  75.     private function voteOnDetailsStatus(?Booking $bookingUserInterface $loggedUser): bool
  76.     {
  77.         return in_array(self::DETAILS_STATUS$loggedUser->getRoles());
  78.     }
  79.     private function voteOnDetailsBase(?Booking $bookingUserInterface $loggedUser): bool
  80.     {
  81.         return in_array(self::DETAILS_BASE$loggedUser->getRoles());
  82.     }
  83.     private function voteOnDetailsCabin(?Booking $bookingUserInterface $loggedUser): bool
  84.     {
  85.         return in_array(self::DETAILS_CABIN$loggedUser->getRoles());
  86.     }
  87.     private function voteOnDetailsParticipant(?Booking $bookingUserInterface $loggedUser): bool
  88.     {
  89.         return in_array(self::DETAILS_PARTICIPANT$loggedUser->getRoles());
  90.     }
  91.     private function voteOnDetailsFormality(?Booking $bookingUserInterface $loggedUser): bool
  92.     {
  93.         return in_array(self::DETAILS_FORMALITY$loggedUser->getRoles());
  94.     }
  95.     private function voteOnDetailsTotal(?Booking $bookingUserInterface $loggedUser): bool
  96.     {
  97.         return in_array(self::DETAILS_TOTAL$loggedUser->getRoles());
  98.     }
  99.     private function voteOnDetailsEmail(?Booking $bookingUserInterface $loggedUser): bool
  100.     {
  101.         return in_array(self::DETAILS_EMAIL$loggedUser->getRoles());
  102.     }
  103.     private function voteOnDetailsTurnover(?Booking $bookingUserInterface $loggedUser): bool
  104.     {
  105.         return in_array(self::DETAILS_TURNOVER$loggedUser->getRoles());
  106.     }
  107.     private function voteOnDetailsSellerBonus(?Booking $bookingUserInterface $loggedUser): bool
  108.     {
  109.         /** @var User $loggedUser */
  110.         if ($this->isUserBelongToGroup($loggedUserUserRepository::SELLER_USER_GROUP_CODE)
  111.             && $booking->getSeller()->getId() !== $loggedUser->getId()) {
  112.             return false;
  113.         }
  114.         return in_array(self::DETAILS_SELLER_BONUS$loggedUser->getRoles());
  115.     }
  116. }