src/Security/Voter/RouteVoter.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Affiliate;
  4. use App\Entity\AffiliateIP;
  5. use App\Utils\RoutePathUtils;
  6. use App\Utils\UserUtils;
  7. use Doctrine\ORM\EntityManager;
  8. use Symfony\Bundle\FrameworkBundle\Routing\Router;
  9. use Symfony\Component\DependencyInjection\ContainerInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  12. use Symfony\Component\HttpFoundation\Request;
  13. class RouteVoter extends Voter
  14. {
  15.     public static $allowRoutes = [
  16.         'login',
  17.         'logout',
  18.         'push_alerts'
  19.     ];
  20.     protected $container;
  21.     /** @var  EntityManager $em */
  22.     protected $em;
  23.     public function __construct(ContainerInterface $container// this is @service_container
  24.     {
  25.         $this->container $container;
  26.         $this->em $this->container->get('doctrine');
  27.     }
  28.     protected function supports($attribute$subject)
  29.     {
  30.         $allRouteNames RoutePathUtils::getAllName($this->container);
  31.         $allRouteNames array_merge($allRouteNamesself::$allowRoutes);
  32.         if (in_array($attribute$allRouteNames)) {
  33.             return true;
  34.         }
  35.         return false;
  36.     }
  37.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  38.     {
  39.         if (in_array($attributeself::$allowRoutes)) {
  40.             return true;
  41.         }
  42.         $isGranted false;
  43.         if ($subject instanceof Request) {
  44.             /** @var Request $request */
  45.             $request $subject;
  46.             $ipAddress $subject->getClientIp();
  47.             /** @var AffiliateIP $IP */
  48.             if ($request->request->has('afid') && ($AFID $this->em->getRepository(Affiliate::class)->findOneBy(['name' => $request->request->get('afid')])) !== null) {
  49.                 /** @var AffiliateIP $IP */
  50.                 if (($IP $this->em->getRepository(AffiliateIP::class)->findOneBy(['affiliate' => $AFID->getId()])) !== null
  51.                     && $IP->getIPaddress() === '*'
  52.                 ) {
  53.                     $isGranted true;
  54.                 } elseif (($IP $this->em->getRepository(AffiliateIP::class)->findOneBy(['IPaddress' => $ipAddress'affiliate' => $AFID->getId()])) !== null) {
  55.                     $isGranted true;
  56.                 }
  57.             } elseif (($IP $this->em->getRepository(AffiliateIP::class)->findOneBy(['IPaddress' => $ipAddress])) !== null) {
  58.                 $isGranted true;
  59.             }
  60.         }
  61.         $afids UserUtils::getAfids($token->getUser());
  62.         if (count($afids) && $this->em->getRepository(Affiliate::class)->findBy(['id' => $afids]) !== null) {
  63.             if (in_array($attribute, ['admin_access_index''admin_access_remove''admin_access_new'])) {
  64.                 $isGranted true;
  65.             }
  66.         }
  67.         return $isGranted;
  68.     }
  69. }