Validação Rápida de Acesso a Arquivos em Node.js com fs.promises.access

Validação Rápida de Acesso a Arquivos em Node.js com fs.promises.access

Tentar ler ou gravar arquivos sem verificar previamente as permissões do sistema operacional pode causar falhas inesperadas na aplicação e interromper a execução do código. O uso de fs.promises.access permite checar de forma assíncrona se o processo possui as permissões necessárias para manipular um arquivo ou diretório antes de iniciar qualquer operação de I/O.

JavaScript

const fs = require('fs/promises');
const constants = require('fs').constants;

/**
 * Verifica se um arquivo ou diretório possui permissões de leitura e escrita.
 * @param {string} caminho - Caminho do arquivo ou diretório.
 * @return {Promise<boolean>} Retorna true se houver acesso ou false em caso de restrição.
 */
async function verificarPermissoes(caminho) {
  try {
    // R_OK verifica leitura, W_OK verifica escrita usando operação OU bitwise (|)
    await fs.access(caminho, constants.R_OK | constants.W_OK);
    return true;
  } catch {
    // Lança exceção caso o arquivo não exista ou as permissões sejam negadas
    return false;
  }
}

// --- Exemplo Prático de Uso ---
(async () => {
  const caminhoArquivo = './dados_config.json';

  // Prepara o arquivo de teste no sistema de arquivos
  await fs.writeFile(caminhoArquivo, JSON.stringify({ ambiente: 'producao' }));

  const temAcesso = await verificarPermissoes(caminhoArquivo);

  if (temAcesso) {
    console.log(`[Sucesso] O arquivo '${caminhoArquivo}' está pronto para leitura e escrita.`);
  } else {
    console.error(`[Erro] Sem permissões suficientes para manipular '${caminhoArquivo}'.`);
  }
})();

Pontos-chave

  • Constantes de Acesso (constants): O método aceita flags como constants.F_OK (existência do arquivo), constants.R_OK (leitura) e constants.W_OK (escrita), combinadas através do operador bitwise |.
  • Fluxo Baseado em Exceções: Em caso de ausência do arquivo ou negação de permissão no SO, o método rejeita a Promise disparando um erro (ex: ENOENT ou EACCES), devendo ser encapsulado em blocos try/catch.
  • Prevenção de Condições de Corrida (Race Conditions): Segundo a documentação oficial do Node.js, não se deve usar access imediatamente antes de open/read/write em pipelines normais; a checagem é recomendada apenas para cenários preventivos ou inicialização de serviços.
  • Sintaxe Moderna com fs/promises: Permite o consumo nativo via async/await com limpeza no código, eliminando a necessidade de callbacks tradicionais ou funções utilitárias como promisify.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *