Pārlūkot izejas kodu

Modificaciones para que funcione en los modulos que no son el base.

gabriel 7 gadi atpakaļ
vecāks
revīzija
9fdc623aef
2 mainītis faili ar 92 papildinājumiem un 47 dzēšanām
  1. 17 3
      Controller/RESTController.php
  2. 75 44
      tests/WebTestCaseBase.php

+ 17 - 3
Controller/RESTController.php

@@ -184,6 +184,15 @@ abstract class RESTController extends VoryxController
         return $this->get('base_tenancy.tenancy_service');
     }
 
+    /**
+     * @return bool Retorna TRUE si estoy en el modulo base.
+     */
+    public function isModuleBase()
+    {
+        return array_key_exists('BaseTenancyBundle', $this->getParameter('kernel.bundles'));
+    }
+
+
     /**
      * Funcion que checkea y setea la tenencia en el objeto.
      * @param Request $request Contiene el request.
@@ -196,9 +205,14 @@ abstract class RESTController extends VoryxController
         $service = $this->getTenancyService();
         if ($service->implementTenancyInterface($entity)) {
             if (array_key_exists('tenancy', $parameters)) {
-                $tenancy = $this->getDoctrine()->getRepository('BaseTenancyBundle:Tenancy')->findOneById($parameters['tenancy']);
-                $entity->setTenancy($tenancy);
-                $service->setTenancy($parameters['tenancy']);
+                if ($this->isModuleBase()) {
+                    $tenancy = $this->getDoctrine()->getRepository('BaseTenancyBundle:Tenancy')->findOneById($parameters['tenancy']);
+                    $entity->setTenancy($tenancy);
+                    $service->setTenancy($parameters['tenancy']);
+                } else {
+                    $entity->setTenancyId($parameters['tenancy']);
+                    $service->setTenancy($parameters['tenancy']);
+                }
             }
         }
         return $entity;

+ 75 - 44
tests/WebTestCaseBase.php

@@ -10,6 +10,7 @@ use Symfony\Bundle\FrameworkBundle\Client;
 
 use Doctrine\Common\Collections\ArrayCollection;
 use ReflectionClass;
+use Symfony\Component\Security\Core\User\User;
 
 class WebTestCaseBase extends WebTestCase
 {
@@ -139,6 +140,9 @@ class WebTestCaseBase extends WebTestCase
             // actualizo las tenencias asociadas al usuario
             $user->setTenancies($arrayTenancies);
             $em->flush();
+        } else {
+            // seteo las tenencias como array en el usuario
+            $this->get('security.token_storage')->getToken()->getUser()->setTenancies($tenancies);
         }
         $service_tenancy->setTenancy($current);
     }
@@ -159,59 +163,90 @@ class WebTestCaseBase extends WebTestCase
             if ($em != null) {
                 // FOS\UserBundle\Model\UserManager
                 // FOS\UserBundle\Doctrine\UserManager
-                $userManager = $this->get('fos_user.user_manager');
-                if ($userManager != null) {
-                    try {
-                        $user = $userManager->findUserBy(array('id' => $this->idUser));
-                    } catch (\Throwable $t) {
-                        $user = null;
-                    }
-                    if (!$user) {
-                        // el usuario no existe por lo tanto lo creo. Deberia ver el tema de las tenencias
-                        // no tengo la oportunidad de probarlo
-                        $user = $userManager->createUser();
-                        $cargo = false;
+                if ($this->isModuleBase()) {
+                    $userManager = $this->get('fos_user.user_manager');
+                    if ($userManager != null) {
                         try {
-                            $em = $this->getDoctrineManager();
-                            $userDB = $em->getRepository("BaseUserBundle:User")->findOneBy(array('id' => $this->idUser));
-                            if ($userDB) {
-                                $cargo = true;
-                                $user->setEmail($userDB->email);
+                            $user = $userManager->findUserBy(array('id' => $this->idUser));
+                        } catch (\Throwable $t) {
+                            $user = null;
+                        }
+                        if (!$user) {
+                            // el usuario no existe por lo tanto lo creo. Deberia ver el tema de las tenencias
+                            // no tengo la oportunidad de probarlo
+                            $user = $userManager->createUser();
+                            $cargo = false;
+                            try {
+                                $em = $this->getDoctrineManager();
+                                $userDB = $em->getRepository("BaseUserBundle:User")->findOneBy(array('id' => $this->idUser));
+                                if ($userDB) {
+                                    $cargo = true;
+                                    $user->setEmail($userDB->email);
+                                    $user->Id = $idUser;
+                                    $user->setUsername($userDB->username);
+                                    $user->setPlainPassword($userDB->plainPassword);
+                                    $user->setEnabled(true);
+                                    $user->setRoles($userDB->getRoles());
+                                    // este comando ademas se setear los datos, los persiste en la base de datos.
+                                    $userManager->updateUser($user);
+                                }
+                            } catch (\Throwable $t) {
+                            }
+                            if (!$cargo) {
+                                // no se cargo el usuario por algun error. Lo hago manual.
+                                $user->setEmail("pepe@pepe.com");
                                 $user->Id = $idUser;
-                                $user->setUsername($userDB->username);
-                                $user->setPlainPassword($userDB->plainPassword);
+                                $user->setUsername('admin');
+                                $user->setPlainPassword('adminpass');
                                 $user->setEnabled(true);
-                                $user->setRoles($userDB->getRoles());
-                                // este comando ademas se setear los datos, los persiste en la base de datos.
-                                $userManager->updateUser($user);
+                                $user->setRoles(array("ROLE_USER"));
+                                $userManager->updateCanonicalFields($user);
+                                $userManager->updatePassword($user);
                             }
-                        } catch (\Throwable $t) {
                         }
-                        if (!$cargo) {
-                            // no se cargo el usuario por algun error. Lo hago manual.
-                            $user->setEmail("pepe@pepe.com");
-                            $user->Id = $idUser;
-                            $user->setUsername('admin');
-                            $user->setPlainPassword('adminpass');
-                            $user->setEnabled(true);
-                            $user->setRoles(array("ROLE_USER"));
-                            $userManager->updateCanonicalFields($user);
-                            $userManager->updatePassword($user);
+                        // contiene el nombre de firewall a utilizar
+                        $firewall = 'main';
+                        // busco el token en el security
+                        $tokenStorage = $this->get('security.token_storage');
+                        if ($tokenStorage != null) {
+                            $token = null;
+                            if (!$tokenStorage->getToken()) {
+                                // no tengo el token, entonces lo creo
+                                $token = new UsernamePasswordToken($user, null, $firewall, array('ROLE_SUPER_ADMIN'));
+                            } else {
+                                // utilizo el token que yo esta creado
+                                $token = $tokenStorage->getToken();
+                            }
+                            // seteo en la session el firewall que voy a utilizar y el token
+                            $session->set('_security_' . $firewall, serialize($token));
+                            $session->save();
+                            // creo una cookie con los datos de la session.
+                            $cookie = new Cookie($session->getName(), $session->getId());
+                            $this->getClient()->getCookieJar()->set($cookie);
+                            // seteo el token en el security.token_storage
+                            $tokenStorage->setToken($token);
+                        } else {
+                            throw new \ErrorException("Error al obtener el token storage.");
                         }
+                    } else {
+                        throw new \ErrorException("Error al obtener el fos user manager.");
                     }
+                } else {
+                    // no estoy en el modulo base
+                    // creo la clase de esta forma para no utilizar el "use" porque va a traer conflicto en otros modulos
+                    $class = "Base\OAuthClientBundle\Security\Core\User\CustomOAuthUser";
+                    $user = new $class('admin');
+                    // no se cargo el usuario por algun error. Lo hago manual.
+                    $user->Id = $idUser;
+                    $user->setRoles(array("ROLE_USER"));
                     // contiene el nombre de firewall a utilizar
                     $firewall = 'main';
                     // busco el token en el security
                     $tokenStorage = $this->get('security.token_storage');
                     if ($tokenStorage != null) {
                         $token = null;
-                        if (!$tokenStorage->getToken()) {
-                            // no tengo el token, entonces lo creo
-                            $token = new UsernamePasswordToken($user, null, $firewall, array('ROLE_SUPER_ADMIN'));
-                        } else {
-                            // utilizo el token que yo esta creado
-                            $token = $tokenStorage->getToken();
-                        }
+                        // no tengo el token, entonces lo creo
+                        $token = new UsernamePasswordToken($user, null, $firewall, array('ROLE_SUPER_ADMIN'));
                         // seteo en la session el firewall que voy a utilizar y el token
                         $session->set('_security_' . $firewall, serialize($token));
                         $session->save();
@@ -220,11 +255,7 @@ class WebTestCaseBase extends WebTestCase
                         $this->getClient()->getCookieJar()->set($cookie);
                         // seteo el token en el security.token_storage
                         $tokenStorage->setToken($token);
-                    } else {
-                        throw new \ErrorException("Error al obtener el token storage.");
                     }
-                } else {
-                    throw new \ErrorException("Error al obtener el fos user manager.");
                 }
             } else {
                 throw new \ErrorException("Error al obtener doctrine.");