/**
   * Método usado para autenticar o usuário no sistema. Aqui o método utiliza o valor dos atributos
   * userCpf e password setados pelo usuário na página para tentar realizar a autenticação, que será
   * confirmada pela chamada do método login da instância de authenticationService.
   *
   * @return
   */
  public String logar() {
    String retorno = "";
    usuario = new Usuario();
    usuario.setCpf(userCpf);
    usuario.setSenhahash(password);
    if (usuarioService.findByCpfSenha(usuario.getCpf(), usuario.getSenhahash())) {
      listaPermissao = permissaoService.findByUsuario(usuario);
      usuario.setPermissoes(listaPermissao);
      if (!listaPermissao.isEmpty()) {

        if (listaPermissao != null && listaPermissao.size() >= 2) {
          return "escolhaPerfil";
        } else {
          idPermissaoAtual = listaPermissao.get(0).getId();
          buscarPerfilUsuarioOrgaoPermissaoId();

          if (listaPerfilUsuarioOrgaos.size() >= 2) {
            return "escolhaPerfil";
          } else {
            retorno = autenticacaoUsuario(listaPermissao.get(0), null);
          }
        }
      } else {
        MensagensController.addError("O usuário não contém nenhum Orgao atribuido!");
      }
    } else {
      MensagensController.addWarn("Usuário ou Senha Inválidos!");
      return "login";
    }
    return retorno;
  }
  public String autenticacaoUsuario(
      Permissao permissaoAute, PerfilUsuarioOrgao perfilUsuarioOrgao) {
    permissaoAtual = listaPermissao.get(listaPermissao.indexOf(permissaoAute));
    // Confere se o mesmo contém permissão para algum orgão
    if (!permissaoAtual.getPerfilUsuarioOrgaos().isEmpty()) {
      if (authenticationService.login(usuario)) {

        if (listaPermissao != null && !listaPermissao.isEmpty()) {
          setPermissoes(listaPermissao);
          // Verefica se as permissoes do usuário é mais que 1..então.
          idPermissaoAtual = permissaoAtual.getId();

          // modelMenu = MenuUtil.formarMenu(menuService.findByMenu(usuario.getCpf(),
          // permissaoAtual.getPerfil().getId()));
          setMenusAcesso(
              menuService.findByMenu(usuario.getCpf(), permissaoAtual.getPerfil().getId()));
          // BUSCA OS PERFILSUUSARIOORGAOPERMISSAO que o usuário tem acesso.. todos os orgãos.
          buscarPerfilUsuarioOrgaoPermissaoId();
          // Quando for na hora de logar o sistema pegará sempre a primeira possição do vetor.
          if (perfilUsuarioOrgao == null) {
            orgaoPerfilAcesso = permissaoAtual.getPerfilUsuarioOrgaos().get(0).getOrgao();
          } else {

            // orgaoPerfilAcesso =
            // permissaoAtual.getPerfilUsuarioOrgaos().get(permissaoAtual.getPerfilUsuarioOrgaos().indexOf(perfilUsuarioOrgao)).getOrgao();
            orgaoPerfilAcesso = perfilUsuarioOrgao.getOrgao();
          }

          // Atribui os valores na sessao
          orgaoDescricao = permissaoAtual.getLotadoOrgao();
          regionalId = permissaoAtual.getLotadoRegional_id();
          regionalDescricao = permissaoAtual.getRegional();
          setorDescricao = permissaoAtual.getLotadoSetor();
          setorId = permissaoAtual.getLotadoSetor_id();
          setServidor(authenticationService.getUsuarioLogado().getCpf());
          autenticado = true;
          return "/index?faces-redirect=true";

        } else {
          MensagensController.addWarn("Nao contem permissao para o Usuário!");
          return "login";
        }
      } else {
        MensagensController.addWarn("Usuário ou Senha Inválidos!");
        return "login";
      }
    } else {
      logout();
      MensagensController.addError("O usuário não contém nenhum Orgao atribuido!");
      return "login";
    }
  }