rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{usersID} {
allow read;
allow write: if request.auth.uid != null;
match /desksCollection/{desksCollectionID} {
allow read;
allow write: if resource.data.DeskName != request.resource.data.DeskName;
}
}
}
}
我想写一条规则,不允许第二次添加相同的文档。 这里有什么不正确的地方?
答案 0 :(得分:0)
您尝试执行的操作无法使用安全规则。这将要求您能够在desksCollection上查询符合具有一定值的字段的条件的文档。但是,在安全规则中无法执行查询。您可以按其ID提取文档,但这对您没有帮助,因为您不知道要提取哪个文档。
如果您要求deskName是唯一的,请考虑使用该值作为文档的ID。然后,您可以编写一条规则来阻止更新(如果该文档已经存在)。
答案 1 :(得分:0)
这是避免令牌重复的方法。您可以在任何字段中使用它。
首先查询文档,如果是null
,则添加该集合。
@override
void initState() {
// TODO: implement initState
super.initState();
firebaseMessaging.getToken().then((token){
print(token);
bool isAvailabe;
Firestore.instance.collection("tokens").where("token",isEqualTo: token).getDocuments().then((snap){
if(snap == null){
Firestore.instance.collection('tokens').add({"token":token}).catchError((error){
print(error);
}).catchError((e){
print(e);
});
}
});
});
}