Last active
August 22, 2021 12:03
-
-
Save jhonsore/3160e2d3c27db08657cb07c1342681a7 to your computer and use it in GitHub Desktop.
Firestore rules
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * 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