src/Security/Voter/ClassifiedVoter.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\BlogComment;
  4. use App\Entity\Classified;
  5. use App\Entity\Event;
  6. use App\Entity\User;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  10. use Symfony\Component\Security\Core\Security;
  11. class ClassifiedVoter extends Voter
  12. {
  13.     const EDIT 'edit';
  14.     const DELETE 'delete';
  15.     const RENEW 'renew';
  16.     private $security;
  17.     public function __construct(Security $security)
  18.     {
  19.         $this->security $security;
  20.     }
  21.     protected function supports($attribute$subject)
  22.     {
  23.         if (!in_array($attribute, [self::EDITself::DELETEself::RENEW])) {
  24.             return false;
  25.         }
  26.         if (!$subject instanceof Classified) {
  27.             return false;
  28.         }
  29.         return true;
  30.     }
  31.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  32.     {
  33.         $user $token->getUser();
  34.         if (!$user instanceof User) {
  35.             return false;
  36.         }
  37.         /** @var Classified $classified */
  38.         $classified $subject;
  39.         if ($this->security->isGranted(User::ROLE_SUPER_ADMIN)) {
  40.             return true;
  41.         }
  42.         switch ($attribute) {
  43.             case self::EDIT:
  44.             case self::DELETE:
  45.             case self::RENEW:
  46.                 return $this->canEditOrDelete($classified$user$token);
  47.         }
  48.         throw new \LogicException('This code should not be reached!');
  49.     }
  50.     private function canEditOrDelete(Classified $classifiedUser $userTokenInterface $token)
  51.     {
  52.         return $classified->getCreatedBy() === $user;
  53.     }
  54. }