vendor/nen/kennisbank-platform/src/Nen/Security/Voter/PublicationVoter.php line 10

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Nen\Bundle\KennisbankPlatformBundle\Security\Voter;
  3. use Nen\Bundle\KennisbankPlatformBundle\Entity\BoltPublication;
  4. use App\Entity\User;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. class PublicationVoter extends Voter
  8. {
  9.     /**
  10.      *
  11.      */
  12.     const ATTRIBUTE_READ 'publication.read';
  13.     /**
  14.      *
  15.      */
  16.     const ATTRIBUTE_DOWNLOAD 'publication.download';
  17.     /**
  18.      * {@inheritDoc}
  19.      */
  20.     protected function supports($attribute$subject)
  21.     {
  22.         return is_object($subject) && get_class($subject) === BoltPublication::class;
  23.     }
  24.     /**
  25.      * {@inheritDoc}
  26.      */
  27.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  28.     {
  29.         /** @var User|null $user */
  30.         $user $token->getUser();
  31.         if (!$user instanceof User) {
  32.             $user null;
  33.         }
  34.         /** @var BoltPublication $publication */
  35.         $publication $subject;
  36.         switch ($attribute) {
  37.             case self::ATTRIBUTE_READ:
  38.                 return $this->canReadPublication($publication$user);
  39.             case self::ATTRIBUTE_DOWNLOAD:
  40.                 return $this->canDownloadPublication($publication$user);
  41.         }
  42.         return false;
  43.     }
  44.     /**
  45.      * @param BoltPublication $publication
  46.      * @param User|null       $user
  47.      * @return bool
  48.      */
  49.     private function canReadPublication(BoltPublication $publicationUser $user null): bool
  50.     {
  51.         if (!$publication->isOnlineReadable()) {
  52.             return false;
  53.         }
  54.         if ($publication->isOnlineReadablePublic()) {
  55.             return true;
  56.         }
  57.         if (empty($user)) {
  58.             return false;
  59.         }
  60.         $subscriptions $publication->getOnlineReadableSubscriptions();
  61.         if (empty($subscriptions)) {
  62.             return true;
  63.         }
  64.         return in_array($user->getCompany()->getLicenseType(), $subscriptions);
  65.     }
  66.     /**
  67.      * @param BoltPublication $publication
  68.      * @param User|null       $user
  69.      * @return bool
  70.      */
  71.     private function canDownloadPublication(BoltPublication $publicationUser $user null): bool
  72.     {
  73.         if (!$publication->isDownloadable()) {
  74.             return false;
  75.         }
  76.         if ($publication->isDownloadablePublic()) {
  77.             return true;
  78.         }
  79.         if (empty($user)) {
  80.             return false;
  81.         }
  82.         $subscriptions $publication->getDownloadableSubscriptions();
  83.         if (empty($subscriptions)) {
  84.             return !$user->isCompanyTrialSubscription();
  85.         }
  86.         return in_array($user->getCompany()->getLicenseType(), $subscriptions);
  87.     }
  88. }