src/Voter/__Accounting/AccountingBookingVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Voter\__Accounting;
  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 AccountingBookingVoter extends Voter
  11. {
  12.     use VoterTrait;
  13.     const DETAILS_BILLING_AND_CREDITS "ACCOUNTING_BOOKING_DETAILS_BILLING_AND_CREDITS";
  14.     const DETAILS_PAYMENTS "ACCOUNTING_BOOKING_DETAILS_PAYMENTS";
  15.     const DETAILS_ACCOUNTING_MANAGEMENT "ACCOUNTING_BOOKING_DETAILS_ACCOUNTING_MANAGEMENT";
  16.     const DETAILS_CALCULATION_TURNOVER "ACCOUNTING_BOOKING_DETAILS_CALCULATION_TURNOVER";
  17.     const DETAILS_CALCULATION_SELLER_BONUS "ACCOUNTING_BOOKING_DETAILS_CALCULATION_SELLER_BONUS";
  18.     const GET_PAYMENT_STATEMENT_PDF "ACCOUNTING_BOOKING_GET_PAYMENT_STATEMENT_PDF";
  19.     const DETAILS_INSURANCES "ACCOUNTING_BOOKING_DETAILS_INSURANCES";
  20.     protected function supports($attribute$subject): bool
  21.     {
  22.         return in_array($attribute, [
  23.                 self::DETAILS_BILLING_AND_CREDITS,
  24.                 self::DETAILS_PAYMENTS,
  25.                 self::DETAILS_ACCOUNTING_MANAGEMENT,
  26.                 self::DETAILS_CALCULATION_TURNOVER,
  27.                 self::DETAILS_CALCULATION_SELLER_BONUS,
  28.                 self::GET_PAYMENT_STATEMENT_PDF,
  29.                 self::DETAILS_INSURANCES,
  30.             ]) && ($subject === null || $subject instanceof Booking);
  31.     }
  32.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  33.     {
  34.         $loggedUser $token->getUser();
  35.         if (!$loggedUser instanceof UserInterface) {
  36.             return false;
  37.         }
  38.         if (null === $subject) {
  39.             return false;
  40.         }
  41.         switch ($attribute) {
  42.             case self::DETAILS_BILLING_AND_CREDITS:
  43.                 return $this->voteOnDetailsBillingAndCredits($subject$loggedUser);
  44.             case self::DETAILS_PAYMENTS:
  45.                 return $this->voteOnDetailsPayments($subject$loggedUser);
  46.             case self::DETAILS_ACCOUNTING_MANAGEMENT:
  47.                 return $this->voteOnDetailsAccountingManagement($subject$loggedUser);
  48.             case self::DETAILS_CALCULATION_TURNOVER:
  49.                 return $this->voteOnDetailsCalculationTurnover($subject$loggedUser);
  50.             case self::DETAILS_CALCULATION_SELLER_BONUS:
  51.                 return $this->voteOnDetailsCalculationSellerBonus($subject$loggedUser);
  52.             case self::GET_PAYMENT_STATEMENT_PDF:
  53.                 return $this->voteOnGetPaymentStatementPdf($subject$loggedUser);
  54.             case self::DETAILS_INSURANCES:
  55.                 return $this->voteOnDetailsInsurances($subject$loggedUser);
  56.         }
  57.         return false;
  58.     }
  59.     private function voteOnDetailsBillingAndCredits(?Booking $bookingUserInterface $loggedUser): bool
  60.     {
  61.         return in_array(self::DETAILS_BILLING_AND_CREDITS$loggedUser->getRoles());
  62.     }
  63.     private function voteOnDetailsPayments(?Booking $bookingUserInterface $loggedUser): bool
  64.     {
  65.         return in_array(self::DETAILS_PAYMENTS$loggedUser->getRoles());
  66.     }
  67.     private function voteOnDetailsAccountingManagement(?Booking $bookingUserInterface $loggedUser): bool
  68.     {
  69.         return in_array(self::DETAILS_ACCOUNTING_MANAGEMENT$loggedUser->getRoles());
  70.     }
  71.     private function voteOnDetailsCalculationTurnover(?Booking $bookingUserInterface $loggedUser): bool
  72.     {
  73.         return in_array(self::DETAILS_CALCULATION_TURNOVER$loggedUser->getRoles());
  74.     }
  75.     private function voteOnDetailsCalculationSellerBonus(?Booking $bookingUserInterface $loggedUser): bool
  76.     {
  77.         /** @var User $loggedUser */
  78.         if ($this->isUserBelongToGroup($loggedUserUserRepository::SELLER_USER_GROUP_CODE)
  79.             && $booking->getSeller()->getId() !== $loggedUser->getId()) {
  80.             return false;
  81.         }
  82.         return in_array(self::DETAILS_CALCULATION_SELLER_BONUS$loggedUser->getRoles());
  83.     }
  84.     private function voteOnGetPaymentStatementPdf(?Booking $bookingUserInterface $loggedUser): bool
  85.     {
  86.         return in_array(self::GET_PAYMENT_STATEMENT_PDF$loggedUser->getRoles());
  87.     }
  88.     private function voteOnDetailsInsurances(?Booking $bookingUserInterface $loggedUser): bool
  89.     {
  90.         return in_array(self::DETAILS_INSURANCES$loggedUser->getRoles());
  91.     }
  92. }