vendor/bluue/sites-bundle/src/Security/SitesVoter.php line 18

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\SitesBundle\Security;
  9. use App\Entity\User;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  12. use Symfony\Component\Security\Core\Security;
  13. class SitesVoter extends Voter
  14. {
  15.     public const ACCESS 'SITES_ACCESS';
  16.     /**
  17.      * @var Security
  18.      */
  19.     private Security $security;
  20.     /**
  21.      * @param Security $security
  22.      */
  23.     public function __construct(Security $security)
  24.     {
  25.         $this->security $security;
  26.     }
  27.     /**
  28.      * @param string $attribute
  29.      * @param mixed $subject
  30.      * @return bool
  31.      */
  32.     protected function supports(string $attribute$subject): bool
  33.     {
  34.         if ($attribute != self::ACCESS) {
  35.             return false;
  36.         }
  37.         if (!is_object($subject)) {
  38.             return false;
  39.         }
  40.         return true;
  41.     }
  42.     /**
  43.      * @param string $attribute
  44.      * @param mixed $subject
  45.      * @param TokenInterface $token
  46.      * @return bool
  47.      */
  48.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  49.     {
  50.         $user $token->getUser();
  51.         if (!$user instanceof User) {
  52.             return false;
  53.         }
  54.         if ($this->security->isGranted('ROLE__SITES__ADMIN')) {
  55.             return true;
  56.         }
  57.         if (!$this->security->isGranted('ROLE__SITES__SMALL_ADMIN')) {
  58.             return false;
  59.         }
  60.         if (method_exists($subject'getCreatedBy') && $subject->getCreatedBy()) {
  61.             return $user === $subject->getCreatedBy();
  62.         } else {
  63.             return true;
  64.         }
  65.     }
  66. }