Primeiros passos com regras de segurança

Com as regras de segurança do Firestore é possível se concentrar em criar uma boa experiência do usuário, sem se preocupar em gerenciar a infraestrutura ou escrever um código de autenticação e autorização no servidor.

As regras de segurança oferecem controle de acesso e validação de dados em um formato simples, mas expressivo. Para criar sistemas de acesso baseados em usuários e em papéis que mantenham os dados dos usuários seguros, é necessário usar o Firebase Authentication com as regras de segurança do Firestore.

Versão 2 das regras de segurança

A versão 2 das regras de segurança do Firestore está disponível desde maio de 2019. A versão 2 das regras muda o comportamento dos caracteres curingas recorrentes {name=**}. Escolha essa versão se pretende usar consultas do grupo de coleções. Para ativar a versão 2, é preciso tornar rules_version = '2'; a primeira linha nas regras de segurança:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

Como escrever regras

Você vai gravar e gerenciar as regras de segurança do Firestore adaptadas ao modelo de dados criado para o banco de dados padrão e para cada banco de dados adicional no seu projeto.

Todas as regras de segurança do Firestore consistem em instruções match, que identificam documentos no banco de dados, e expressões allow, que controlam o acesso a esses documentos:

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

Toda solicitação de uma biblioteca de cliente da Web/para dispositivos móveis do Firestore para o banco de dados é avaliada em relação às as regras de segurança antes de ler ou gravar dados. Se as regras negarem o acesso a qualquer um dos caminhos de documento especificados, toda a solicitação falhará.

Veja abaixo alguns exemplos de conjuntos de regras básicos. Embora essas regras sejam válidas, elas não são recomendadas para aplicativos de produção:

Autenticação obrigatória

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Negar todos

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Permitir todos

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

O caminho {document=**} usado nos exemplos acima corresponde a qualquer documento em todo o banco de dados. Para aprender a combinar caminhos de dados específicos e trabalhar com dados hierárquicos, continue consultando o guia sobre Como estruturar regras de segurança.

Como testar regras

O Cloud Firestore fornece um simulador de regras que pode ser usado para testar o conjunto de regras. Para acessá-lo, vá até a guia Regras na seção do Firestore, no Console do Firebase.

Com essa ferramenta, você simula leituras, gravações e exclusões autenticadas e não autenticadas. Ao simular uma solicitação autenticada, é possível criar e visualizar tokens de autenticação de vários fornecedores. As solicitações simuladas são executadas no conjunto de regras do seu editor, e não no conjunto de regras implantando atualmente.

Como implantar regras

Antes de começar a usar o Firestore a partir do seu aplicativo para dispositivos móveis, você precisará implantar regras de segurança. É possível implantar regras no console do Firebase usando a CLI do Firebase ou a API REST de gerenciamento do Firestore.

As atualizações nas regras de segurança do Firestore levam até um minuto para fazer efeito nas novas consultas e listeners. No entanto, pode levar até 10 minutos para que as alterações sejam propagadas totalmente e afetem os listeners ativos.

Usar o Console do Firebase

Para configurar e implantar seu primeiro conjunto de regras, para o banco de dados padrão no projeto, abra a guia Regras na seção do Firestore do console do Firebase.

Escreva suas regras no editor on-line e clique em Publicar.

Usar a CLI do Firebase

Você também pode implantar regras usando a Firebase CLI. Assim, é possível manter as regras sob controle de versão com o código do aplicativo e implementar regras como parte do processo de implantação atual.

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

// Edit the generated .rules file to your desired security rules
// ...

// Deploy rules for all configured databases
firebase deploy --only firestore

Próximas etapas