src/LiteDesk/FinanceBundle/Security/Authorization/DutyTravelVoter.php line 17

Open in your IDE?
  1. <?php
  2. namespace LiteDesk\FinanceBundle\Security\Authorization;
  3. use LiteDesk\UserBundle\Entity\User;
  4. use LiteDesk\FinanceBundle\Entity\DutyTravelOrder;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\AbstractVoter;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\User\AdvancedUserInterface;
  9. use JMS\DiExtraBundle\Annotation\Service;
  10. use JMS\DiExtraBundle\Annotation\Tag;
  11. /**
  12.  * @Service("security.access.duty_travel_voter", public=false)
  13.  * @Tag("security.voter")
  14.  */
  15. class DutyTravelVoter extends Voter
  16. {
  17.     const VIEW 'VIEW';
  18.     const EDIT 'EDIT';
  19.     const PROMOTE 'PROMOTE';
  20.     const DEMOTE 'DEMOTE';
  21.     const DELETE 'DELETE';
  22.     const TEMPLATE 'TEMPLATE';
  23.     protected function supports($attribute$subject)
  24.     {
  25.         if(!in_array($attribute$this->getSupportedAttributes()))
  26.         {
  27.             return false;
  28.         }
  29.         if(!($subject instanceof DutyTravelOrder))
  30.         {
  31.             return false;
  32.         }
  33.         return true;
  34.     }
  35.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  36.     {
  37.         $user $token->getUser();
  38.         /* @var $dutyTravelOrder DutyTravelOrder */
  39.         // make sure there is a user object (i.e. that the user is logged in)
  40.         if (!$user instanceof AdvancedUserInterface) {
  41.             return false;
  42.         }
  43.         // double-check that the User object is the expected entity (this
  44.         // only happens when you did not configure the security system properly)
  45.         if (!$user instanceof User) {
  46.             throw new \LogicException('The user is somehow not our User class!');
  47.         }
  48.         switch($attribute) {
  49.             case self::VIEW:
  50.                 return $subject->getAuthor()->getId() == $user->getId();
  51.                 break;
  52.             case self::EDIT:
  53.                 return $subject->getAuthor()->getId() == $user->getId();
  54.                 break;
  55.             case self::DELETE:
  56.                 return $subject->getAuthor()->getId() == $user->getId();
  57.                 break;
  58.             case self::TEMPLATE:
  59.                 return $subject->getAuthor()->getId() == $user->getId();
  60.                 break;
  61.         }
  62.         return false;
  63.     }
  64.     protected function getSupportedAttributes()
  65.     {
  66.         return array(self::VIEWself::EDITself::PROMOTEself::DELETEself::DEMOTEself::TEMPLATE);
  67.     }
  68. }