Enviar arquivos para um bucket privado
Prepare o ambiente
Envie arquivos de usuários autenticados e limite a leitura ao diretório de cada identidade de usuário.
- Projeto de estudo separado dos registros de produção.
- Conhecimento da trilha Comece aqui.
Prepare o bucket
No Storage do projeto de estudo, crie um bucket chamado documentos e mantenha a opção pública desativada. Configure limite de tamanho e tipos MIME conforme os arquivos aceitos pela aplicação. Um bucket privado exige autorização para leitura, além da autorização de upload.
Separe os caminhos por usuário
Use o UUID da identidade de usuário como primeiro diretório. No SQL Editor, crie políticas específicas para esse bucket:
create policy documentos_inserir on storage.objectsfor insert to authenticated with check ( bucket_id = 'documentos' and (storage.foldername(name))[1] = (select auth.uid())::text);create policy documentos_ler on storage.objectsfor select to authenticated using ( bucket_id = 'documentos' and (storage.foldername(name))[1] = (select auth.uid())::text);Com o cliente JavaScript inicializado e a sessão autenticada, envie um File recebido pelo formulário:
const { data: { user }, error: authError } = await supabase.auth.getUser()if (authError || !user) throw new Error('Entre antes de enviar um arquivo.')const caminho = user.id + '/' + crypto.randomUUID() + '.pdf'const { error } = await supabase.storage.from('documentos').upload(caminho, arquivo)if (error) throw errorconst { data, error: leitura } = await supabase.storage.from('documentos').download(caminho)if (leitura) throw leituraO exemplo pressupõe um PDF escolhido pelo usuário. Confira o tipo no formulário e no bucket. O nome aleatório evita substituir um arquivo existente. As políticas acima não autorizam sobrescrita, exclusão ou atualização.
Confira dois usuários
Envie um documento com a identidade de usuário A. A leitura deve funcionar nessa sessão. Depois entre com a identidade de usuário B e tente baixar o mesmo caminho: a leitura deve ser recusada. Confira também o acesso sem sessão. Não transforme o bucket em público para contornar um erro de política. URLs assinadas dão acesso temporário ao portador do link: compartilhe somente quando esse comportamento fizer parte da aplicação.
Confira o resultado
Execute as conferências descritas no guia e registre ambiente, versão e resultado antes de aplicar em outro projeto.
Fontes consultadas
Procedimento conferido na documentação oficial. A execução em uma instância Supabase não foi realizada nesta revisão.
