vendor/bluue/projects-bundle/src/Security/ProjectsVoter.php line 20

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Thomas HERISSON (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace Bluue\ProjectsBundle\Security;
  9. use App\Entity\User;
  10. use Bluue\ProjectsBundle\Entity\Project;
  11. use Bluue\ProjectsBundle\Entity\Task;
  12. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  13. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  14. use Symfony\Component\Security\Core\Security;
  15. class ProjectsVoter extends Voter
  16. {
  17.     public const ACCESS 'PROJECTS_ACCESS';
  18.     /**
  19.      * @var Security
  20.      */
  21.     private Security $security;
  22.     /**
  23.      * @param Security $security
  24.      */
  25.     public function __construct(Security $security)
  26.     {
  27.         $this->security $security;
  28.     }
  29.     /**
  30.      * @param string $attribute
  31.      * @param mixed $subject
  32.      * @return bool
  33.      */
  34.     protected function supports(string $attribute$subject): bool
  35.     {
  36.         if ($attribute != self::ACCESS) {
  37.             return false;
  38.         }
  39.         if (!is_object($subject)) {
  40.             return false;
  41.         }
  42.         return true;
  43.     }
  44.     /**
  45.      * @param string $attribute
  46.      * @param mixed $subject
  47.      * @param TokenInterface $token
  48.      * @return bool
  49.      */
  50.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  51.     {
  52.         $user $token->getUser();
  53.         if (!$user instanceof User) {
  54.             return false;
  55.         }
  56.         if ($this->security->isGranted('ROLE__PROJECTS__ADMIN')) {
  57.             return true;
  58.         }
  59.         if (!$this->security->isGranted('ROLE__PROJECTS__SMALL_ADMIN')) {
  60.             return false;
  61.         }
  62.         if ($subject instanceof Task && $subject->getUsers()->contains($user)) {
  63.             return true;
  64.         }
  65.         if (method_exists($subject'getCreatedBy') && $subject->getCreatedBy()) {
  66.             return $user->getId() == $subject->getCreatedBy()->getId();
  67.         } else {
  68.             return !($subject instanceof Task || $subject instanceof Project);
  69.         }
  70.     }
  71. }