使用firebase规则在firestore中进行数据验证

roejwanj  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(170)

我的收藏路径是{Country}/{State}/{ZipCode},我在firestore中存储了一些数据,如粘贴的图像所示。

我在firestore规则部分写了一条规则

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

我想使用firestore规则确保新创建的文档中的Quantity字段为正数。所以我写了一个规则,上面显示的那个,但它不起作用。我仍然可以将负值写入firestore。如何创建规则以确保firestore的数量字段下没有负值?

ggazkfy8

ggazkfy81#

如果我没弄错的话,你的规则确实有效。
我已经尝试了你的规则与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>
q8l4jmvw

q8l4jmvw2#

尝试将文档路径更改为:

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

fd3cxomn3#

  • 应该检查该字段是否存在
  • 在检查它的整数值之前
  • 而操作是create(和update):

导致这样的规则:

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
    }

  }
}

相关问题