Skip to content

Instantly share code, notes, and snippets.

@jhonsore
Last active August 22, 2021 12:03
Show Gist options
  • Save jhonsore/3160e2d3c27db08657cb07c1342681a7 to your computer and use it in GitHub Desktop.
Save jhonsore/3160e2d3c27db08657cb07c1342681a7 to your computer and use it in GitHub Desktop.
Firestore rules
/**
* libera leitura e escrita em todos os documentos
*/
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
/**
* apenas pessoas autenticadas poderão ter acesso a coleção de cards
*/
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /cards/{cards} {
allow read, write: if request.auth != null;
}
}
}
/**
* em um nó de produtos cada operação precisará de uma regra diferente
*/
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /produtos/{produto} {
// qualquer usuário que tiver o id do produto poderá ler seu conteúdo
allow get;
// somente pessoas autorizadas poderão lista os itens do nó
allow list: if request.auth != null;
// somente o usuário que criou o produto poderá atualizar ele
// (resource são os dados que estào sendo lidos ou escritos)
allow update: if resource.data.user_id == request.auth.uid;
// para atualizar o usuário precisa estar autenticado
// e a descrição precisa ter no mínimo 400 caracteres
//e deve ser do tipo float
// e deve conter todos os dados em hasAll()
allow create: if request.resource.data.user_id != null
&& request.resource.data.descricao.length < 400
&& request.resource.data.valor is float
&& request.resource.data.hasAll(['user_id', 'valor', 'descricao', 'titulo']);
// somente usuários com a permissão de delete poderão deletar o documento
// o get faz uma requisição no banco e retorna as permissões do usuário e checa se existe a permissão de deletar
allow delete: if get(/databases/$(database)/documents/permissoes/$(request.auth.uid)).data.deletar == true;
}
}
}
/**
* permite leitura por qualquer usuário
* permite escrita apenas pelo usuário em que o id for o do usuário autenticado
*/
service cloud.firestore{
match /databases/{database}/documents{
match /users/{uid} {
allow read;
allow write:
if request.auth.uid == uid
}
}
}
/**
* acessando subcoleções
*/
// acessando o documento via código
photoRef = firestore.collection('users').doc('sparky').collection('photos').doc('123')
// acessando o documento nas regras
match /users/{uid}/photos/{photoId} {
// aqui o uid = sparky e photoId = 123
}
/*
* permitir apenas que usuário autenticados possam ler e escrever as fotos
**/
match /users/{uid}/photos/{photoId} {
allow read, write:
if request.auth.uid == uid;
}
/**
* selecionar todas as coleções que possuem o nome history
*/
rules_version= "2"
match /{prefix=**}/history/{id}{
}
firestore.collectionGroup("history").get();
/**
* permite acesso de leitura apenas quando houver o dado act como click
*/
rules_version="2";
match /{prefix=**}/history/{id}{
allow read: if resource.data.act == "click"
}
// lendo os dados baseado na regra
firestore.collectionGroup("history").where("act", "==", "click").get();
/**
* permite apenas listar os documentos com limite menor que 20
*/
match /users/{id}{
allow list: if request.query.limit <= 20;
}
usersQuery = db.collection('users').limit(20)
usersQuery.get();
/*
* regras
**/
write --> create / update / delete
read --> get / list
service cloud.firestore {
match /databases/{database}/documents {
function isPostAuthor() {
return request.auth.uid != null && resource.data.authorId === request.auth.uid;
}
// Match any document in the 'posts' collection
match /posts/{postId} {
allow read: if ....;
// Note that we insure that the initial value of authorId corresponds to the uid of the creator
allow create: if (auth.token.author === true || auth.token.editor === true) && request.resource.data.authorId === request.auth.uid;
allow update: if isPostAuthor() || auth.token.editor === true;
allow delete: if ...;
}
}
}
/*
* acessando claim de um usuário
* somente permite a escrita na coleção, se existir um claim chamdo admin
**/
match guides/{guidId} {
allow read: if request.auth.uid != null;
allow write: if request.auth.token.admin == true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment