src/Service/Panel/AccessVoters/EventVoter.php line 8

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\Panel\AccessVoters;
  3. use Harmonizely\Model\EventInterface;
  4. use Harmonizely\Model\UserInterface;
  5. class EventVoter extends AbstractVoter
  6. {
  7.     /**
  8.      * Resource name
  9.      */
  10.     const RESOURCE_NAME 'event';
  11.     /**
  12.      * View event
  13.      */
  14.     const EVENT_VIEW 'event_view';
  15.     /**
  16.      * Edit event
  17.      */
  18.     const EVENT_EDIT 'event_edit';
  19.     /**
  20.      * Edit delete
  21.      */
  22.     const EVENT_DELETE 'event_delete';
  23.     /**
  24.      * Return resource name
  25.      *
  26.      * @return string
  27.      */
  28.     function getResourceName(): string
  29.     {
  30.         return self::RESOURCE_NAME;
  31.     }
  32.     /**
  33.      * Return allowed attributes for current user
  34.      *
  35.      * @return array|string[]
  36.      */
  37.     function getResourceAttributes(): array
  38.     {
  39.         return [self::EVENT_VIEWself::EVENT_EDITself::EVENT_DELETE];
  40.     }
  41.     /**
  42.      * Return allowed attributes for current user
  43.      *
  44.      * @param UserInterface $user
  45.      * @param $subject
  46.      * @return array|string[]
  47.      */
  48.     function getAllowedAttributes(UserInterface $user$subject): array
  49.     {
  50.         if (!($subject instanceof EventInterface)) {
  51.             return $this->getResourceAttributes();
  52.         }
  53.         $allowedAttributes = [];
  54.         $eventUser $subject->getUser();
  55.         if ($eventUser->getId() === $user->getId()) {
  56.             $allowedAttributes $this->getResourceAttributes();
  57.         } else {
  58.             $userDefaultOrganization $user->getDefaultOrganization();
  59.             if ($eventUser->getDefaultOrganization()->getId() === $userDefaultOrganization->getId()) {
  60.                 if ($userDefaultOrganization->isOrganizationOwner($user)) {
  61.                     $allowedAttributes $this->getResourceAttributes();
  62.                 }
  63.             }
  64.         }
  65.         return $allowedAttributes;
  66.     }
  67.     /**
  68.      * Determines if the attribute and subject are supported by this voter.
  69.      *
  70.      * @param string $attribute An attribute
  71.      * @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
  72.      *
  73.      * @return bool True if the attribute and subject are supported, false otherwise
  74.      */
  75.     protected function supports($attribute$subject): bool
  76.     {
  77.         if (!($subject instanceof EventInterface)) {
  78.             return false;
  79.         }
  80.         if (!in_array($attribute$this->getResourceAttributes())) {
  81.             return false;
  82.         }
  83.         return true;
  84.     }
  85. }