我的收藏路径是
{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
规则来确保新创建的文档中的“数量”字段为正。因此,我已经写了一条上面显示的规则,但是它没有用。我仍然可以将负值写入firestore
。
如何创建规则以确保firestore
的“数量”字段下没有负值?
答案 0 :(得分:1)
如果我没有记错的话,您的规则就会奏效。
我用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>
答案 1 :(得分:0)
应该检查该字段是否存在
在检查它的整数值之前
,而操作是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
}
}
}
答案 2 :(得分:0)
尝试将文档路径更改为:
service cloud.firestore {
match /databases/{database}/documents {
match /{Country}/{State}/{document=**} {
allow read;
allow write: if request.resource.data.Quantity > 0;
}
}
}