public function __construct(ContainerInterface $container)
 {
     $this->container = $container;
     try {
         $this->em = $this->container->get('doctrine')->getManager('bos');
     } catch (\Exception $e) {
     }
     if (!$this->em) {
         $this->em = $this->container->get('doctrine')->getEntityManager();
     }
     $custom = null;
     if (!$this->container->getParameter('bos_login_name')) {
         die("BOSUser needs the 'bos_login_name' parameter defined in config.yml. Please refer to the documentation.");
     }
     if (!$this->container->getParameter('bos_default_behaviour')) {
         die("BOSUser needs the 'bos_default_behaviour' parameter defined in config.yml. Please refer to the documentation.");
     }
     $custom = $this->container->getParameter('bos_user_entity');
     //chequeo el sistema en el que estoy y sus permisos
     //sistema
     //if(!$containerSystem){
     //   die("BOSUser needs the 'bos_login_name' parameter defined in config.yml. Please refer to the documentation.");
     // }
     //permisos
     //die($containerSystem."");
     if ($custom) {
         $t = explode(":", $custom);
         $fBundleName = $t[0];
         $fEntityName = $t[1];
         $foundName = "";
         $foundDir = "";
         $bundles = $this->container->get('kernel')->getBundles();
         $bundleName = '';
         foreach ($bundles as $type => $bundle) {
             $cBundle = new \ReflectionClass($bundle);
             $cName = $cBundle->getName();
             $temp = explode("\\", $cName);
             $bundleName = trim($temp[count($temp) - 1]);
             $bundleDir = "";
             for ($i = 0; $i < count($temp) - 1; $i++) {
                 if ($temp[$i] != "\\") {
                     $bundleDir = $bundleDir . $temp[$i] . "\\";
                 }
             }
             if ($bundleName == $fBundleName) {
                 $foundName = $bundleName;
                 $foundDir = $bundleDir;
             }
         }
         if ($foundName == "") {
             die("BOSUser: Couldn't find the bundle '" . $fBundleName . "'. Check your parameters and try again.");
         }
         $this->entityClass = $foundDir . "Entity\\" . $fEntityName;
         try {
             $this->bos = $this->em->getRepository($custom);
         } catch (\Exception $e) {
             die("BOSUser: "******"";
         $this->bos = $this->em->getRepository("BOSUserBundle:BOSUser");
     }
     if ($this->isLoggedIn()) {
         //Keep the user data updated
         $session = $this->getSession();
         $username = $this->getUser()->getUsername();
         $user = $this->bos->findOneBy(array("username" => $username));
         $session->set('bos_user', $user);
     }
     $containerSystem = $this->container->getParameter('bos_system');
     $containerRoles = $this->container->getParameter('roles');
     $mSystem = $this->container->getParameter('bos_system');
     if (!isset($mSystem) || !$mSystem || $mSystem == "") {
         die("You must set a system name to use BOSUser.");
     }
     $actualSystem = $this->em->getRepository('BOSUserBundle:System')->findOneBy(array("name" => $mSystem));
     $this->system = $actualSystem;
     /* If the system doesnt exist, we create it */
     if (!$actualSystem) {
         $actualSystem = new \BOS\UserBundle\Entity\System();
         $actualSystem->setName($containerSystem);
         $this->em->persist($actualSystem);
         $this->em->flush();
     }
     //CREACION DE PARAMETROS DE SISTEMAS
     $rol_temp = NULL;
     /* Revisamos para borrar los que quede de mas en la base */
     $manager = $this->em;
     $roles = $manager->getRepository("BOSUserBundle:Role")->findBy(array("system" => $actualSystem));
     foreach ($roles as $role) {
         $cRole = $this->getRoleByName($role->getName(), $containerRoles);
         /* cRole tiene el rol que esta en el config.yml con sus permisos */
         if ($cRole != null) {
             $rolePermissions = $role->getRolePermissions();
             /* Encontró el Rol de la base en el YML, ahora reviso sus permisos */
             foreach ($rolePermissions as $rolePermission) {
                 $permission = $rolePermission->getPermission();
                 /* Para cada permiso del rol en la base de datos */
                 //print_r($cRole["permissions"]);
                 if (!in_array($permission->getName(), $cRole["permissions"])) {
                     $manager->remove($rolePermission);
                 }
             }
         } else {
             $rp = $manager->getRepository("BOSUserBundle:RolePermission")->findBy(array("role" => $role));
             foreach ($rp as $rperm) {
                 $manager->remove($rperm);
                 $manager->flush();
             }
             $manager->remove($role);
             $manager->flush();
         }
     }
     $manager->flush();
     $permissions = $manager->getRepository("BOSUserBundle:Permission")->findBy(array("system" => $actualSystem));
     foreach ($permissions as $permission) {
         $q = $manager->createQuery("SELECT rp FROM BOSUserBundle:RolePermission rp " . "JOIN BOSUserBundle:Role r WHERE r = rp.role " . "WHERE r.system = :system AND rp.permission = :permission");
         $q->setParameter("system", $actualSystem);
         $q->setParameter("permission", $permission);
         $result = $q->getResult();
         $amountUsed = sizeof($result);
         if ($amountUsed == 0) {
             /* No tiene ningún RolePermission */
             $manager->remove($permission);
             $manager->flush();
         }
     }
     //guardo los roles que figuran en el yml si hay roles y sistema seteados
     if ($containerRoles && $actualSystem) {
         //recorro los roles y los guardo
         $mKeys = array_keys($containerRoles);
         $i = -1;
         foreach ($containerRoles as $actualRole) {
             $i++;
             $mRoleName = $mKeys[$i];
             $role = $this->em->getRepository('BOSUserBundle:Role')->findOneBy(array("name" => $mRoleName, "system" => $actualSystem));
             //si el rol no existe lo creo
             if (!$role) {
                 $role = new Role();
                 $role->setName($mRoleName);
                 $role->setSystem($actualSystem);
                 $this->em->persist($role);
                 $this->em->flush();
             }
             foreach ($actualRole["permissions"] as $actualPermission) {
                 $permission = $this->em->getRepository("BOSUserBundle:Permission")->findOneBy(array("system" => $actualSystem, "name" => $actualPermission));
                 //si el permiso no, existe lo creo
                 if (!$permission) {
                     $permission = new Permission();
                     $permission->setName($actualPermission);
                     $permission->setSystem($actualSystem);
                     $this->em->persist($permission);
                     $this->em->flush();
                 }
                 $rPermission = $this->em->getRepository('BOSUserBundle:RolePermission')->findOneBy(array("role" => $role, "permission" => $permission));
                 if (!$rPermission) {
                     $rPermission = new RolePermission();
                     $rPermission->setRole($role);
                     $rPermission->setPermission($permission);
                     $this->em->persist($rPermission);
                     $this->em->flush();
                 }
             }
         }
     }
     try {
     } catch (\Exception $e) {
         die("Error: " . $e->getMessage());
     }
 }
Beispiel #2
0
 /**
  * Remove rolePermission
  *
  * @param \BOS\UserBundle\Entity\RolePermission $rolePermission
  */
 public function removeRolePermission(\BOS\UserBundle\Entity\RolePermission $rolePermission)
 {
     $this->rolePermissions->removeElement($rolePermission);
 }