Проверка данных в FireStore с использованием правил FireBase - PullRequest
0 голосов
/ 23 сентября 2018

Мой путь сбора - {Country}/{State}/{ZipCode}, где я храню некоторые данные в firestore, как показано на вставленном изображении.enter image description here

Я написал правило в разделе правил firestore, например

 service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {   
            allow read;
       allow write: if request.resource.data.Quantity>0;
    }
  }
}

Я хочу убедиться, что поле Количество во вновь созданном документе является положительнымиспользуя firestore правила.Итак, я написал правило, показанное выше, но оно не работает.Я все еще могу записать отрицательные значения в firestore.Как я могу создать правило, чтобы гарантировать отсутствие отрицательных значений в поле Количество firestore?

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Попробуйте изменить путь к документу:

service cloud.firestore {
match /databases/{database}/documents {
match /{Country}/{State}/{document=**} {   
allow read;       
allow write: if request.resource.data.Quantity > 0;
}
}
}
0 голосов
/ 23 сентября 2018

Если я не ошибаюсь, ваши правила действительно работают.

Я опробовал ваши правила на странице HTML, которая пытается писать документы с различными значениями Quantity, см. Код ниже.В двух случаях (простой сбор или подколлекция) в базу данных записываются только документы A и D (а документы B и C генерируют ошибку).

Правила:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
      allow write: if request.resource.data.Quantity > 0
    }
  }
}

HTML-страница:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script src="https://www.gstatic.com/firebasejs/5.4.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/5.4.1/firebase-firestore.js"></script>
</head>

<body>
    <script>
        // Initialize Firebase
        var config = {
            apiKey: ".....",
            authDomain: ".....",
            databaseURL: ".....",
            projectId: "....."
        };

        var db = firebase.firestore();
        var theRef = db.collection('India').doc('Maharashtra').collection('411057');
        theRef.doc("A").set({
            name: "Mumbai",
            Quantity: 1
        });

        theRef.doc("B").set({
            name: "Mumbai",
            Quantity: 0
        });

        theRef.doc("C").set({
            name: "Mumbai",
            Quantity: -2
        });

        theRef.doc("D").set({
            name: "Mumbai",
            Quantity: 2
        });


        var theRef = db.collection('India1');
        theRef.doc("A").set({
            name: "Mumbai",
            Quantity: 1
        });

        theRef.doc("B").set({
            name: "Mumbai",
            Quantity: 0
        });

        theRef.doc("C").set({
            name: "Mumbai",
            Quantity: -2
        });

        theRef.doc("D").set({
            name: "Mumbai",
            Quantity: 2
        });

    </script>

</body>
</html>
0 голосов
/ 23 сентября 2018
  • необходимо проверить, существует ли поле вообще

  • , прежде чем проверять его целочисленное значение

  • во время операцийявляются createupdate):

, что приводит к такому правилу:

service cloud.firestore {
  match /databases/{database}/documents {

    // match /{document=**} {
    // match /Orders/{document=**} { 
    match /{Country}/{State}/{PostCode}/{document=**} {  
      allow read;
      allow create: if request.resource.data.Quantity != null && int(request.resource.data.Quantity) > 0
      allow update: if request.resource.data.Quantity != null && int(request.resource.data.Quantity) > -1
    }

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...