src/Voter/__Accounting/AccountingPartnerVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Voter\__Accounting;
  3. use App\Entity\Partner\Partner;
  4. use App\Voter\VoterTrait;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. class AccountingPartnerVoter extends Voter
  9. {
  10.     use VoterTrait;
  11.     const LIST_PARTNER "ACCOUNTING_PARTNER_LIST_PARTNER";
  12.     const LIST_PERIOD "ACCOUNTING_PARTNER_LIST_PERIOD";
  13.     const DETAILS_PERIOD "ACCOUNTING_PARTNER_DETAILS_PERIOD";
  14.     const EXPORT_PERIOD "ACCOUNTING_PARTNER_EXPORT_PERIOD";
  15.     const ARCHIVE_PERIOD "ACCOUNTING_PARTNER_ARCHIVE_PERIOD";
  16.     const UNARCHIVE_PERIOD "ACCOUNTING_PARTNER_UNARCHIVE_PERIOD";
  17.     protected function supports($attribute$subject): bool
  18.     {
  19.         return (in_array($attribute, [self::LIST_PARTNERself::LIST_PERIOD]) && $subject === null) ||
  20.             (in_array($attribute, [self::DETAILS_PERIODself::EXPORT_PERIODself::ARCHIVE_PERIODself::UNARCHIVE_PERIOD]) && $subject instanceof Partner);
  21.     }
  22.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  23.     {
  24.         $loggedUser $token->getUser();
  25.         if (!$loggedUser instanceof UserInterface) {
  26.             return false;
  27.         }
  28.         switch ($attribute) {
  29.             case self::LIST_PARTNER:
  30.                 return $this->voteOnListPartner($loggedUser);
  31.             case self::LIST_PERIOD:
  32.                 return $this->voteOnListPeriod($loggedUser);
  33.             case self::DETAILS_PERIOD:
  34.                 return $this->voteOnDetailsPeriod($subject$loggedUser);
  35.             case self::EXPORT_PERIOD:
  36.                 return $this->voteOnExportPeriod($subject$loggedUser);
  37.             case self::ARCHIVE_PERIOD:
  38.                 return $this->voteOnArchivePeriod($subject$loggedUser);
  39.             case self::UNARCHIVE_PERIOD:
  40.                 return $this->voteOnUnarchivePeriod($subject$loggedUser);
  41.         }
  42.         return false;
  43.     }
  44.     private function voteOnListPartner(UserInterface $loggedUser): bool
  45.     {
  46.         return in_array(self::LIST_PARTNER$loggedUser->getRoles());
  47.     }
  48.     private function voteOnListPeriod(UserInterface $loggedUser): bool
  49.     {
  50.         return in_array(self::LIST_PERIOD$loggedUser->getRoles());
  51.     }
  52.     private function voteOnDetailsPeriod(?Partner $partnerUserInterface $loggedUser): bool
  53.     {
  54.         if (null === $partner) {
  55.             return false;
  56.         }
  57.         return in_array(self::DETAILS_PERIOD$loggedUser->getRoles());
  58.     }
  59.     private function voteOnExportPeriod(?Partner $partnerUserInterface $loggedUser): bool
  60.     {
  61.         if (null === $partner) {
  62.             return false;
  63.         }
  64.         return in_array(self::EXPORT_PERIOD$loggedUser->getRoles());
  65.     }
  66.     private function voteOnArchivePeriod(?Partner $partnerUserInterface $loggedUser): bool
  67.     {
  68.         if (null === $partner) {
  69.             return false;
  70.         }
  71.         return in_array(self::ARCHIVE_PERIOD$loggedUser->getRoles());
  72.     }
  73.     private function voteOnUnarchivePeriod(?Partner $partnerUserInterface $loggedUser): bool
  74.     {
  75.         if (null === $partner) {
  76.             return false;
  77.         }
  78.         return in_array(self::UNARCHIVE_PERIOD$loggedUser->getRoles());
  79.     }
  80. }