Пример #1
0
 /**
  * Creates an ACL for a specific user
  * @param stdClass $usuario - usuario logado, recebido do Zend_Auth
  * @return Core_Acl
  */
 public static function createAcl($usuario)
 {
     //Lets assume we have a model for the page_privileges with a method like this
     //which would return PagePrivilege objects with the page_id passed as the param.
     $privilegios_unidade = DaoPrivilegio::getPrivilegiosPorUnidade((int) $usuario->ID_UNIDADE);
     $privilegios_usuario = DaoPrivilegioUsuario::getPrivilegiosPorUsuario((int) $usuario->ID);
     $acl = new Core_Acl();
     $acl->addRole(new Zend_Acl_Role($usuario->ID));
     $acl->setIdUnidade($usuario->ID_UNIDADE);
     $acl->setNomeUnidade($usuario->DIRETORIA);
     $acl->setTrocouUnidade($usuario->TROCOU ? true : false);
     foreach ($privilegios_unidade as $privilege) {
         $recurso = DaoRecurso::getRecursoById($privilege['ID_RECURSO']);
         if (!$acl->has($recurso)) {
             $acl->addResource($recurso);
         }
         // Checa pela presenca de assertion
         if ($recurso->hasClasseAssertion()) {
             $acl->allow($usuario->ID, $recurso, null, new $recurso->classe_assertion());
         } else {
             if ($privilege['PERMISSAO'] == 1) {
                 $acl->allow($usuario->ID, $recurso);
             } else {
                 $acl->deny($usuario->ID, $recurso);
             }
         }
     }
     foreach ($privilegios_usuario as $privilege2) {
         $recurso = DaoRecurso::getRecursoById($privilege2['ID_RECURSO']);
         // @todo foi adicionado a condicao !NULL para corrigir possivel bug, analizar!
         if (!is_null($recurso) && !$acl->has($recurso)) {
             $acl->addResource($recurso);
         }
         // @todo foi adicionado a condicao !NULL para corrigir possivel bug, analizar!
         // Checa pela presenca de assertion
         if (!is_null($recurso) && $recurso->hasClasseAssertion()) {
             $acl->allow($usuario->ID, $recurso, null, new $recurso->classe_assertion());
         } else {
             if ($privilege2['PERMISSAO'] == "1") {
                 $acl->allow($usuario->ID, $recurso);
             } else {
                 $acl->deny($usuario->ID, $recurso);
             }
         }
     }
     if ($acl->isTrocouUnidade()) {
         $acl->allow($usuario->ID, 115);
     }
     return $acl;
 }
Пример #2
0
 /**
  * @return controlar
  */
 private function _prepareAcl()
 {
     if (!is_null($this->usuario) && !is_null($this->usuario->ID_UNIDADE)) {
         // atualizar informações da unidade do usuário na sessão
         // com as informações do banco, a menos que o usuário tenha trocado
         // Testar a existência de um cache de acl para o usuário
         if (!$this->cache->test('acl_' . $this->usuario->ID)) {
             $this->acl = AclFactory::createAcl($this->usuario);
             $this->cache->save($this->acl, 'acl_' . $this->usuario->ID, array('acl_usuario_' . $this->usuario->ID, 'acl_unidade_' . $this->usuario->ID_UNIDADE));
         } else {
             $this->acl = $this->cache->load('acl_' . $this->usuario->ID);
             if ($this->usuario->ID_UNIDADE != $this->acl->getIdUnidade()) {
                 if (!$this->acl->isTrocouUnidade() && !$this->usuario->TROCOU) {
                     // id do cache e da session não batem, e usuário não trocou de unidade
                     // limpar o cache e recriá-lo
                     $this->cache->remove('acl_' . $this->usuario->ID);
                     $this->cache->clean('matchingAnyTag', array('acl_usuario_' . $this->usuario->ID));
                     $this->acl = AclFactory::createAcl($this->usuario);
                     $this->cache->save($this->acl, 'acl_' . $this->usuario->ID, array('acl_usuario_' . $this->usuario->ID, 'acl_unidade_' . $this->usuario->ID_UNIDADE));
                     // limpar
                 }
             }
             $this->usuario = $this->acl->updateSession();
         }
         // Forçar permissão de troca de unidades pro usuário que já trocou de unidade
         if ($this->acl->isTrocouUnidade()) {
             $this->acl->allow($this->usuario->ID, 115);
         }
     }
     return $this;
 }