/** * verifica se existe ação para determinado caminho (modulo, controle) * @param string $sAcao * @param string $sControle * @param string $sModulo * @return boolean $lReturn */ public static function verificaAcaoAction($sAcao = NULL, $sControle = NULL, $sModulo = NULL) { $aAcoes = Administrativo_Model_Acao::getAll(); foreach ($aAcoes as $oAcao) { $sAcaoModulo = trim($oAcao->getControle()->getModulo()->getIdentidade()); $sAcaoControle = trim($oAcao->getControle()->getIdentidade()); if ($sAcaoModulo != $sModulo && $sAcaoControle != $sControle || empty($sAcao)) { continue; } if ($sModulo == $sAcaoModulo && $sControle == $sAcaoControle) { $aAcoesExtra = explode(',', trim($oAcao->getSubAcoes())); $aAcoesExtra = array_merge($aAcoesExtra, array(trim($oAcao->getAcaoAcl()))); if (in_array($sAcao, $aAcoesExtra)) { return true; } } } return false; }
/** * Adiciona as permissões de acesso do perfil */ public function setPermissaoPerfilAction() { $iCodigoPerfil = $this->getRequest()->getParam('perfil'); $aAcoes = $this->getRequest()->getParam('acao'); $oPerfil = Administrativo_Model_Perfil::getById($iCodigoPerfil); $oPerfil->limparAcoes(); $aPerfilAcao = array(); foreach ($aAcoes as $id => $sAcao) { if ($sAcao === 'on') { $oAcao = Administrativo_Model_Acao::getById($id); $aPerfilAcao[] = $oAcao; } } if ($aPerfilAcao !== null) { $oPerfil->adicionaAcoes($aPerfilAcao); $iCodigoPerfil = $oPerfil->getId(); } $this->_helper->getHelper('FlashMessenger')->addMessage(array('notice' => 'Permissões modificadas para o Perfil.')); $this->_redirector->gotoSimple('editar', 'perfil', 'administrativo', array('id' => $oPerfil->getId())); }
/** * Metodo para remover uma acao */ public function removeAction() { $iIdAcao = $this->getRequest()->getParam('id'); $oAcao = Administrativo_Model_Acao::getById($iIdAcao); $oAcao->destroy(); $this->_helper->getHelper('FlashMessenger')->addMessage(array('notice' => 'Ação removida.')); $this->_redirector->gotoSimple('index', 'modulo'); }
/** * Configura as permissões do perfil administrativo */ public function setPermissaoAdmAction() { $usuario = $this->getRequest()->getParam('usuario'); $usuario = Administrativo_Model_Usuario::getById($usuario); $acoes = $this->getRequest()->getParam('acao'); $usuario->limparAcoes(); $usuario_acao = array(); foreach ($acoes as $id => $a) { if ($a == 'on') { $acao = Administrativo_Model_Acao::getById($id); $usuario_acao[] = $acao; } } $usuario->adicionaAcoes($usuario_acao); $this->_helper->getHelper('FlashMessenger')->addMessage(array('success' => $this->translate->_('Permissões modificadas com sucesso.'))); $this->_redirector->gotoSimple('editar', 'usuario', 'administrativo', array('id' => $usuario->getId())); }
/** * Retorna todas as ações do usuário para um contribuinte * * @param integer $contribuinte IM do contribuinte * @param string $modulo Filtro por módulo * @return Array */ public function getAcoes($contribuinte = null, $modulo = null) { $a = array(); foreach ($this->entity->getAcoes() as $acao) { $acao = new Administrativo_Model_Acao($acao); if ($modulo === null || strtolower($acao->getControle()->getModulo()->getNome()) === $modulo) { $a[] = $acao; } } // Se for diferente de "contador" pega as permissoes dos usuarios clientes if ($this->entity->getTipo() != 2) { $usuario_contribuinte = Administrativo_Model_UsuarioContribuinte::getByUsuarioContribuinte($this, $contribuinte); foreach ($usuario_contribuinte as $uc) { $a = array_merge($a, $uc->getAcoes($modulo)); } } return $a; }
/** * Carrega todos os menus cadastrados no sistema negando o acesso */ protected function carregaMenus() { $oAcoes = Administrativo_Model_Acao::getAll(); foreach ($oAcoes as $oAcao) { $sModulo = $oAcao->getControle()->getModulo()->getIdentidade(); $sControle = $oAcao->getControle()->getIdentidade(); $oAcoesExtra = explode(',', trim($oAcao->getSubAcoes())); $aAcoesExtra = array_merge($oAcoesExtra, array($oAcao->getAcaoAcl())); $oResource = new Zend_Acl_Resource($sModulo . ":" . $sControle); if (!$this->_acl->has($oResource->getResourceId())) { $this->_acl->addResource($oResource->getResourceId()); } foreach ($aAcoesExtra as $sAcao) { if (empty($sAcao)) { continue; } if (!$oAcao->getControle()->getVisivel()) { $this->_acl->allow('Usuario', $oResource->getResourceId(), $sAcao); } else { $this->_acl->deny('Usuario', $oResource->getResourceId(), $sAcao); } } } }
/** * Vincula vetor de acao ao UsuarioContribuinte * @param Administrativo_Model_Acao[] $acoes * * @throws Exception */ public function adicionaAcoes(array $aAcoesNovasEnvio) { if (count($aAcoesNovasEnvio) <= 0) { throw new Exception('Parametro de ações não informado corretamente.'); } $aContribuintesAcoes = $this->getEntity()->getUsuarioContribuinteAcoes(); $aAcoesAntigas = array(); $aAcoesNovas = array(); if (count($aContribuintesAcoes) > 0) { foreach ($aContribuintesAcoes as $oAcao) { $aAcoesAntigas[$oAcao->getAcao()->getId()] = $oAcao->getAcao()->getId(); } } foreach ($aAcoesNovasEnvio as $oAcaoNova) { $aAcoesNovas[$oAcaoNova->getId()] = $oAcaoNova->getId(); } if (count($aAcoesAntigas) > 0) { $aAcoesAdicionar = array_diff($aAcoesNovas, $aAcoesAntigas); } else { $aAcoesAdicionar = $aAcoesNovas; } foreach ($aAcoesAdicionar as $iAcao) { $oAcaoAdicionar = Administrativo_Model_Acao::getById($iAcao); $oUsuarioContribuinte = new Administrativo_Model_UsuarioContribuinteAcao(); $oUsuarioContribuinte->setUsuarioContribuinte($this->entity); $oUsuarioContribuinte->setAcao($oAcaoAdicionar->getEntity()); $this->em->persist($oUsuarioContribuinte->getEntity()); } $this->em->flush(); }