/**
  * 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();
 }