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