Example #1
0
 /**
  * Levando os dados do ACL
  * 
  * @return bool
  */
 public function startup($options = array('validSession' => true))
 {
     $this->_started = true;
     $token = Zend_Controller_Front::getInstance()->getRequest()->getParam('token');
     $__idUserToken__ = Zend_Controller_Front::getInstance()->getRequest()->getParam('__idUserToken__');
     $__codeToken__ = Zend_Controller_Front::getInstance()->getRequest()->getParam('__codeToken__');
     $noLocation = Zend_Controller_Front::getInstance()->getRequest()->getParam('no_location');
     /**
      * Resgate os parâmetros usados no roteamento do FrontController
      * para carregarmos no Zend_Acl
      * 
      * Carregue o Acl de acordo com o módulo que o usuário querer
      * acessar
      */
     if (isset($options['module'])) {
         $moduleName = $options['module'];
     } else {
         $moduleName = Zend_Controller_Front::getInstance()->getRequest()->getModuleName();
     }
     if (isset($options['controller'])) {
         $controllerName = $options['controller'];
     } else {
         $controllerName = Zend_Controller_Front::getInstance()->getRequest()->getControllerName();
     }
     $actionName = Zend_Controller_Front::getInstance()->getRequest()->getActionName();
     /** processo usado para os sistemas que estão dentro do VB, não usar para os sistemas em PHP */
     if ($__idUserToken__ != '') {
         Zend_Auth::getInstance()->getStorage()->clear();
         $idUser = $__idUserToken__ * 1;
         $codeToken = $__codeToken__ * 1;
         if ($idUser == 0) {
             $idUser = 1;
         }
         if ($codeToken == 0) {
             $codeToken = -1;
         }
         $idUser = $idUser / 70;
         # algorítmo com a criptografia
         $idUser = $idUser / $codeToken;
         /**
          * Levanto o objeto para o usuário
          * Resgato os dados do usuário da sessão
          */
         $user = $this->_getUser();
         $rowSession = $user->getRowSession($idUser);
         /**
          * Verifico se existe id do usuário na sessão
          * se não escreva nela os dados do usuário 
          */
         if ($rowSession->getId() != '') {
             if (!$noLocation) {
                 if ($_SESSION["logon"]["usuario"] != $rowSession->getLogin()) {
                     header('location:/Application/index.php?email=' . $rowSession->getLogin() . '&urlLocation=' . $_SERVER['PHP_SELF'] . '&module=' . $moduleName);
                     exit;
                 }
             } else {
                 $storage = Zend_Auth::getInstance()->getStorage();
                 $storage->write($rowSession);
                 Zend_Auth::getInstance()->setStorage($storage);
                 /**
                  * Usado para sistema legado
                  */
                 $_SESSION["logon"]["active"] = 1;
                 $_SESSION["logon"]["id_usuario"] = $rowSession->getId();
                 $_SESSION["logon"]["usuario"] = $rowSession->getLogin();
                 $_SESSION["logon"]["nome"] = $rowSession->getName();
                 $_SESSION["logon"]["papel"] = $rowSession->getRole();
                 $_SESSION["logon"]["empresa"] = $rowSession->getEmpresa();
                 $_SESSION["logon"]["filial"] = $rowSession->getFilial();
             }
         } else {
             $rowSession = new stdClass();
         }
         unset($user);
     } else {
         if ($token) {
             $rowSession = new ZendT_Acl_User_Row();
             $rowSession->fromToken($token);
             /**
              * Usado para sistema legado
              */
             $_SESSION["logon"]["active"] = 1;
             $_SESSION["logon"]["id_usuario"] = $rowSession->getId();
             $_SESSION["logon"]["usuario"] = $rowSession->getLogin();
             $_SESSION["logon"]["nome"] = $rowSession->getName();
             $_SESSION["logon"]["papel"] = $rowSession->getRole();
         } else {
             #$rowSession = Zend_Auth::getInstance()->getStorage()->read();
             $rowSession = Auth_Session_User::getInstance()->getRowSession();
         }
     }
     if (!$rowSession instanceof ZendT_Acl_User_Row) {
         /**
          * Usado para sistema legado
          */
         $rowSession = new ZendT_Acl_User_Row();
         $rowSession->setId($_SESSION["logon"]["id_usuario"]);
         $rowSession->setLogin($_SESSION["logon"]["usuario"]);
         $rowSession->setName($_SESSION["logon"]["nome"]);
         $rowSession->setRole($_SESSION["logon"]["papel"]);
     }
     /**
      * Se não existir o id do usuário na sessão
      * e se o validar sessão estiver habilitado
      * 
      * Retorne para o usuário a mensagem de sessão expirada
      */
     if ($rowSession->getRole() == '' && $options['validSession']) {
         $this->_valid = false;
         $this->_message = "Sessão expirada, favor logar novamente!";
         /**
          * Caso a sessão estiver de pé execute as regras relacionadas
          * a disposição dos elementos da intranet de acordo com seu papel
          *
          */
     } else {
         /**
          * Implemente o papel default para o usuário caso não haja na sessão
          * um papel definido.
          */
         if ($rowSession->getRole() == '') {
             $rowSession->setRole('DEFAULT');
         }
         $this->loadAcl($moduleName);
         /**
          * Registro o recurso acessado montando uma string
          * com o module/controller/action 
          */
         $resource = strtolower($moduleName) . '.' . strtolower($controllerName) . '.' . strtolower($actionName);
         //action
         $roles = $rowSession->getRoles();
         if ($actionName == 'filter-valid') {
             $this->_valid = true;
         } else {
             $this->_valid = $this->_isAllowed($rowSession->getRole(), $resource);
             //$this->_valid = $this->_acl->isAllowed($rowSession->getRole(), $resource);
             if (strpos($resource, 'cms.') !== false) {
                 $this->_valid = true;
             }
             if (!$this->_valid && is_array($roles)) {
                 foreach ($roles as $role) {
                     $this->_valid = $this->_isAllowed($role, $resource);
                     //$this->_valid = $this->_acl->isAllowed($role, $resource);
                     if ($this->_valid) {
                         break;
                     }
                 }
             }
         }
         #$rowSession->dataMenu = array();
         if (!isset($rowSession->dataMenu[$moduleName])) {
             $dataMenu = $this->_getResource()->getMenu($moduleName);
             $roles = $rowSession->getRoles();
             foreach ($dataMenu as $parentName => &$itens) {
                 foreach ($itens as $menu) {
                     //$isAllow = $this->_acl->isAllowed($rowSession->getRole(), $menu->getUrl());
                     $isAllow = $this->_isAllowed($rowSession->getRole(), $menu->getUrl());
                     if ($isAllow) {
                         $rowSession->dataMenu[$moduleName][$parentName][] = $menu->toArray();
                     }
                     if (!$isAllow && is_array($roles)) {
                         foreach ($roles as $role) {
                             //$isAllow = $this->_acl->isAllowed($role, $menu->getUrl());
                             $isAllow = $this->_isAllowed($role, $menu->getUrl());
                             if ($isAllow) {
                                 $rowSession->dataMenu[$moduleName][$parentName][] = $menu->toArray();
                                 break;
                             }
                         }
                     }
                 }
             }
             $rowSession->dataMenuEncode[$moduleName] = 'UTF8';
             /**
              * @todo 
              */
             /*
              if ($rowSession->dataMenu[$moduleName]){
              $rowSession->dataMenu[$moduleName] = 'loaded';
              }
             */
             $storage = Zend_Auth::getInstance()->getStorage();
             $storage->write($rowSession);
             Zend_Auth::getInstance()->setStorage($storage);
         }
         $this->_message = "Acesso não autorizado!";
     }
 }
Example #2
0
 /**
  *
  * @param int $id
  * @return \ZendT_Acl_User_Row 
  */
 public function getRowSession($id)
 {
     $sql = "SELECT usr.id, \n                       usr.nome as login, \n                       usr.descricao as nome, \n                       usr.email, \n                       ppl.hierarquia as papel, \n                       usr.id as chapa,\n                       usr.avatar,\n                       usr.id_empresa,\n                       empresa.nome as nome_empresa,\n                       empresa.apelido as apelido_empresa,\n                       empresa.hierarquia as hierarquia_empresa\n                   FROM " . Auth_Model_Conta_Mapper::$table . " usr\n                   LEFT JOIN " . Auth_Model_Conta_Mapper::$table . " ppl ON (usr.id_papel_pai = ppl.id)\n                   LEFT JOIN " . Ca_Model_Pessoa_Mapper::$table . " empresa ON (ppl.id_empresa = empresa.id)\n                  WHERE usr.id = :id_usuario";
     $stmt = $this->getAdapter()->query($sql, array('id_usuario' => $id));
     $row = $stmt->fetch();
     $_fileSystem = new Ged_Model_Arquivo_FileSystem();
     if (!$row['avatar']) {
         $_auth = new Auth_Model_Conta_Mapper();
         $_auth->setNome('GUEST')->retrieve();
         $row['avatar'] = $_auth->getAvatar();
     }
     $row['avatar'] = $_fileSystem->getDirectoryAdress($row['avatar']);
     $apps = $this->getApps($row['id']);
     $empresa = array();
     $empresa['id'] = $row['id_empresa'];
     $empresa['nome'] = $row['nome_empresa'];
     $empresa['apelido'] = $row['apelido_empresa'];
     $empresa['hierarquia'] = $row['hierarquia_empresa'];
     $user = new ZendT_Acl_User_Row();
     $user->setId($row['id'])->setLogin($row['login'])->setRole($row['papel'])->setEmail($row['email'])->setName($row['nome'])->setAvatar($row['avatar'])->setChapa($row['chapa'])->setApps($apps)->setEmpresa($empresa);
     return $user;
 }