/** * 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!"; } }
/** * * @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; }