我有一个HashMap
,其中有2个参数要添加到Firestore Database
中。
FirebaseFirestore mFirestore=FirebaseFirestore.getInstance();
Map<String,Object> userItemsMap=new HashMap<>();
userItemsMap.put("EmailAddress",user.getEmail());
userItemsMap.put("CostPrice",thaliBO.getCostPrice());
mFirestore.collection("Maharashtra/411057/"+user.getUid()).add(userItemsMap)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
String str="hi";
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
String str="hi";
}
});
我正在使用Firestore
规则验证数据,
service cloud.firestore {
match /databases/{database}/documents {
match /{state}/{zip}/{uid}/{document=**} {
allow write: if request.resource.data.CostPrice>0 &&
request.resource.data.EmailAddress.size()<30
}
}
}
我担心有人使用反向工程向userItemsMap
添加更多参数,例如
userItemsMap.put("PhoneNUmber","123456789");
将存储在firestore
中,这会消耗不必要的内存。
firestore
中是否有任何数据验证规则可以防止这种情况发生?
答案 0 :(得分:1)
您应该像以前一样使用resource
变量。
使用data
的{{1}}属性,您将获得resource
,即文档数据的映射。
rules.Map
类型具有Map
和keys()
方法,请参见https://firebase.google.com/docs/reference/rules/rules.Map。
然后,您只需检查一下即可:
size()
和
request.resource.data.size() == 2
对应于keys
和EmailAddress
。为此,您将使用CostPrice
的{{1}}方法,因为hasOnly()
方法返回keys
,请参见https://firebase.google.com/docs/reference/rules/rules.List。因此,请执行以下操作:
keys()