src/Security/PermisoVoter.php line 24

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: Pablo
  5.  * Date: 1/31/2019
  6.  * Time: 3:05 PM
  7.  */
  8. namespace App\Security;
  9. use App\Entity\Rol;
  10. use App\Entity\RolPermiso;
  11. use App\Entity\Usuario;
  12. use App\Entity\Permiso;
  13. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  14. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Component\Security\Core\Security;
  17. class PermisoVoter extends Voter
  18. {
  19.     private $security;
  20.     private $em;
  21.     public function __construct(Security $security, EntityManagerInterface $em)
  22.     {
  23.         $this->security = $security;
  24.         $this->em = $em;
  25.     }
  26.     protected function supports($attribute, $subject)
  27.     {
  28.         $permiso_entity = $this->em->getRepository(Permiso::class)->findOneBy(['permiso'=>$attribute]);
  29.         if (!$permiso_entity){
  30.             return false;
  31.         }
  32.         return true;
  33.     }
  34.     protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
  35.     {
  36.         $user = $token->getUser();
  37.         $roles = $user->getRoles();
  38.         foreach ($roles as $rol){
  39.             $rol_entity = $this->em->getRepository(Rol::class)->findOneBy(['rol'=>$rol]);
  40.             $permisos = $this->em->getRepository(RolPermiso::class)->findBy(['idRol'=>$rol_entity]);
  41.             foreach ($permisos as $permiso){
  42.                 if ($attribute === $permiso->getIdPermiso()->getPermiso()){
  43.                     return true;
  44.                 }
  45.             }
  46.         }
  47.         return false;
  48.     }
  49. }