/**
  * 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;
 }
                 $out['message'] = 'SGDOC - Permissão alterada com sucesso.';
                 $out['success'] = 'true';
             } catch (Exception $e) {
                 $out = array('success' => 'false', 'error' => $e->getMessage());
             }
             break;
         case 'excluir-privilegio-usuario':
             try {
                 //
                 $manterPermissao = array();
                 $manterPermissao = $privilegio;
                 //
                 if ($getPrivilegioUsuario->result == true) {
                     $manterPermissao['ID'] = $getPrivilegioUsuario->result[0]['ID'];
                 }
                 $rs = DaoPrivilegioUsuario::deletePrivilegioUsuario($manterPermissao);
                 if ($rs->success == false) {
                     throw new Exception($rs->error);
                 }
                 Controlador::getInstance()->cache->clean('matchingAnyTag', array('acl_usuario_' . $idUsuario));
                 $out['message'] = 'SGDOC - Permissão alterada com sucesso.';
                 $out['success'] = 'true';
             } catch (Exception $e) {
                 $out = array('success' => 'false', 'error' => $e->getMessage());
             }
             break;
     }
 } catch (Exception $e) {
     LogError::sendReport($e);
     $out = array('success' => 'false', 'error' => $e->getMessage());
 }