src/Knitink/UniverseBundle/Security/TeamVoter.php line 19

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the Knitink Project package.
  4.  *
  5.  * Created by Globunet Soluciones Tecnologicas, SL. on 13/01/17. <info@globunet.com>
  6.  * Copyright (c) 2016 Knitink Technologies, SL. All rights reserved.
  7.  */
  8. namespace Knitink\UniverseBundle\Security;
  9. use Knitink\UniverseBundle\Entity\Permission;
  10. use Knitink\UniverseBundle\Entity\Team;
  11. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  12. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  13. use Symfony\Component\HttpFoundation\Session\Session;
  14. use Globunet\DinamicDatabaseBundle\Services\DatabaseConnector;
  15. class TeamVoter extends Voter
  16. {
  17.     private $databaseConnector;
  18.     private $session;
  19.     public function __construct(DatabaseConnector $databaseConnectorSession $session)
  20.     {
  21.         $this->databaseConnector $databaseConnector;
  22.         $this->session $session;
  23.     }
  24.     protected function supports($attribute$subject)
  25.     {
  26.         return $subject instanceof Team && $attribute === 'VOTER_KNITINK_UNIVERSE_TEAM';
  27.     }
  28.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  29.     {
  30.         $user $token->getUser();
  31.         if(($user instanceof \Symfony\Component\Security\Core\User\User || $user instanceof \Knitink\CoreBundle\Entity\User)){
  32.             if(in_array("ROLE_SUPER_ADMIN"$user->getRoles()) || in_array("ROLE_KNK_UNIV_SUPER_ADMIN"$user->getRoles()) || in_array("ROLE_KNK_UNIV_ADMIN"$user->getRoles()))
  33.             return true;
  34.         }
  35.         if (!$user instanceof \Knitink\CoreBundle\Entity\User) {
  36.             return false;
  37.         }
  38.         return $this->checker($user$attribute$subject);
  39.     }
  40.     public function checker($user$attribute$subject$em null)
  41.     {
  42.         $database $this->session->get('database');
  43.         if ($em == null) {
  44.             $this->databaseConnector->resetConnection($databasenullnullnulltrue);
  45.             $em $this->databaseConnector->getEntityManager();
  46.         }
  47.         $entity $em->getRepository(Permission::class)->findOneBy(['user' => $user->getId()]);
  48.         if ($entity != null) {
  49.             foreach ($entity->getTeams() as $team) {
  50.                 if ($team->getId() === $subject->getId()) {
  51.                     return true;
  52.                 }
  53.             }
  54.         }
  55.         return false;
  56.     }
  57. }