vendor/crea/event-bundle/src/Voter/EventVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace Crea\EventBundle\Voter;
  3. use Crea\EventBundle\Entity\EventCategory;
  4. use Crea\EventBundle\Entity\EventModel;
  5. use Crea\EventBundle\Provider\EventRightCodeProvider;
  6. use Exception;
  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. use Crea\SecurityBundle\Entity\User;
  11. class EventVoter extends Voter
  12. {
  13.     protected EventRightCodeProvider $eventRightCodeProvider;
  14.     public function __construct(EventRightCodeProvider $eventRightCodeProvider)
  15.     {
  16.         $this->eventRightCodeProvider $eventRightCodeProvider;
  17.     }
  18.     /**
  19.      * @inheritDoc
  20.      * @throws Exception
  21.      */
  22.     protected function supports($attribute$subject): bool
  23.     {
  24.         $attributes = [
  25.             $this->eventRightCodeProvider->getMainEventCategoryCreateRightCode(),
  26.             $this->eventRightCodeProvider::TYPE_CODE_LIST,
  27.             $this->eventRightCodeProvider::TYPE_CODE_CREATE,
  28.             $this->eventRightCodeProvider::TYPE_CODE_UPDATE,
  29.             $this->eventRightCodeProvider::TYPE_CODE_REMOVE,
  30.             $this->eventRightCodeProvider::LOG_CODE_LIST
  31.         ];
  32.         if ($subject instanceof EventCategory) {
  33.             $attributes[] = $this->eventRightCodeProvider->getEventCategoryViewRightCode($subject);
  34.             $attributes[] = $this->eventRightCodeProvider->getEventCategoryCreateRightCode($subject);
  35.             $attributes[] = $this->eventRightCodeProvider->getEventCategoryUpdateRightCode($subject);
  36.             $attributes[] = $this->eventRightCodeProvider->getEventCategoryRemoveRightCode($subject);
  37.             $attributes[] = $this->eventRightCodeProvider->getEventModelCreateRightCode($subject);
  38.         }
  39.         if ($subject instanceof EventModel) {
  40.             $attributes[] = $this->eventRightCodeProvider->getEventModelUpdateRightCode($subject);
  41.             $attributes[] = $this->eventRightCodeProvider->getEventModelRemoveRightCode($subject);
  42.         }
  43.         return in_array($attribute$attributes);
  44.     }
  45.     /**
  46.      * @inheritDoc
  47.      * @throws Exception
  48.      */
  49.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  50.     {
  51.         /** @var User $loggedUser */
  52.         $loggedUser $token->getUser();
  53.         if (!$loggedUser instanceof UserInterface) {
  54.             return false;
  55.         }
  56.         if ($attribute === $this->eventRightCodeProvider->getMainEventCategoryCreateRightCode()) {
  57.             return $this->voteOnMainEventCategoryCreate($loggedUser);
  58.         }
  59.         if ($attribute === $this->eventRightCodeProvider::LOG_CODE_LIST) {
  60.             return $this->voteOnEventLogList($loggedUser);
  61.         }
  62.         switch ($attribute) {
  63.             case $this->eventRightCodeProvider::TYPE_CODE_LIST:
  64.                 return $this->voteOnEventTypeList($loggedUser);
  65.             case $this->eventRightCodeProvider::TYPE_CODE_CREATE:
  66.                 return $this->voteOnEventTypeCreate($loggedUser);
  67.             case $this->eventRightCodeProvider::TYPE_CODE_UPDATE:
  68.                 return $this->voteOnEventTypeUpdate($loggedUser);
  69.             case $this->eventRightCodeProvider::TYPE_CODE_REMOVE:
  70.                 return $this->voteOnEventTypeRemove($loggedUser);
  71.         }
  72.         if ($subject instanceof EventCategory) {
  73.             switch ($attribute) {
  74.                 case $this->eventRightCodeProvider->getEventCategoryViewRightCode($subject):
  75.                     return $this->voteOnEventCategoryView($subject$loggedUser);
  76.                 case $this->eventRightCodeProvider->getEventCategoryCreateRightCode($subject):
  77.                     return $this->voteOnEventCategoryCreate($subject$loggedUser);
  78.                 case $this->eventRightCodeProvider->getEventCategoryUpdateRightCode($subject):
  79.                     return $this->voteOnEventCategoryUpdate($subject$loggedUser);
  80.                 case $this->eventRightCodeProvider->getEventCategoryRemoveRightCode($subject):
  81.                     return $this->voteOnEventCategoryRemove($subject$loggedUser);
  82.                 case $this->eventRightCodeProvider->getEventModelCreateRightCode($subject):
  83.                     return $this->voteOnEventModelCreate($subject$loggedUser);
  84.             }
  85.         }
  86.         if ($subject instanceof EventModel) {
  87.             switch ($attribute) {
  88.                 case $this->eventRightCodeProvider->getEventModelUpdateRightCode($subject):
  89.                     return $this->voteOnEventModelUpdate($subject$loggedUser);
  90.                 case $this->eventRightCodeProvider->getEventModelRemoveRightCode($subject):
  91.                     return $this->voteOnEventModelRemove($subject$loggedUser);
  92.             }
  93.         }
  94.         return false;
  95.     }
  96.     private function voteOnEventLogList(UserInterface $loggedUser): bool
  97.     {
  98.         return in_array($this->eventRightCodeProvider::LOG_CODE_LIST$loggedUser->getRoles());
  99.     }
  100.     /**
  101.      * @throws Exception
  102.      */
  103.     private function voteOnEventTypeList(UserInterface $loggedUser): bool
  104.     {
  105.         return in_array($this->eventRightCodeProvider::TYPE_CODE_LIST$loggedUser->getRoles());
  106.     }
  107.     /**
  108.      * @throws Exception
  109.      */
  110.     private function voteOnEventTypeCreate(UserInterface $loggedUser): bool
  111.     {
  112.         return in_array($this->eventRightCodeProvider::TYPE_CODE_CREATE$loggedUser->getRoles());
  113.     }
  114.     /**
  115.      * @throws Exception
  116.      */
  117.     private function voteOnEventTypeUpdate(UserInterface $loggedUser): bool
  118.     {
  119.         return in_array($this->eventRightCodeProvider::TYPE_CODE_UPDATE$loggedUser->getRoles());
  120.     }
  121.     /**
  122.      * @throws Exception
  123.      */
  124.     private function voteOnEventTypeRemove(UserInterface $loggedUser): bool
  125.     {
  126.         return in_array($this->eventRightCodeProvider::TYPE_CODE_REMOVE$loggedUser->getRoles());
  127.     }
  128.     private function voteOnMainEventCategoryCreate(UserInterface $loggedUser): bool
  129.     {
  130.         return in_array($this->eventRightCodeProvider->getMainEventCategoryCreateRightCode(), $loggedUser->getRoles());
  131.     }
  132.     /**
  133.      * @throws Exception
  134.      */
  135.     private function voteOnEventCategoryView(EventCategory $eventCategoryUserInterface $loggedUser): bool
  136.     {
  137.         return in_array($this->eventRightCodeProvider->getEventCategoryViewRightCode($eventCategory), $loggedUser->getRoles());
  138.     }
  139.     /**
  140.      * @throws Exception
  141.      */
  142.     private function voteOnEventCategoryCreate(EventCategory $eventCategoryUserInterface $loggedUser): bool
  143.     {
  144.         return in_array($this->eventRightCodeProvider->getEventCategoryCreateRightCode($eventCategory), $loggedUser->getRoles());
  145.     }
  146.     /**
  147.      * @throws Exception
  148.      */
  149.     private function voteOnEventCategoryUpdate(EventCategory $eventCategoryUserInterface $loggedUser): bool
  150.     {
  151.         return in_array($this->eventRightCodeProvider->getEventCategoryUpdateRightCode($eventCategory), $loggedUser->getRoles());
  152.     }
  153.     /**
  154.      * @throws Exception
  155.      */
  156.     private function voteOnEventCategoryRemove(EventCategory $eventCategoryUserInterface $loggedUser): bool
  157.     {
  158.         return in_array($this->eventRightCodeProvider->getEventCategoryRemoveRightCode($eventCategory), $loggedUser->getRoles());
  159.     }
  160.     /**
  161.      * @throws Exception
  162.      */
  163.     private function voteOnEventModelCreate(EventCategory $eventCategoryUserInterface $loggedUser): bool
  164.     {
  165.         return in_array($this->eventRightCodeProvider->getEventModelCreateRightCode($eventCategory), $loggedUser->getRoles());
  166.     }
  167.     /**
  168.      * @throws Exception
  169.      */
  170.     private function voteOnEventModelUpdate(EventModel $eventModelUserInterface $loggedUser): bool
  171.     {
  172.         return in_array($this->eventRightCodeProvider->getEventModelUpdateRightCode($eventModel), $loggedUser->getRoles());
  173.     }
  174.     /**
  175.      * @throws Exception
  176.      */
  177.     private function voteOnEventModelRemove(EventModel $eventModelUserInterface $loggedUser): bool
  178.     {
  179.         return in_array($this->eventRightCodeProvider->getEventModelRemoveRightCode($eventModel), $loggedUser->getRoles());
  180.     }
  181. }