コード例 #1
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;
 }