我想写一条规则,不允许第二次添加相同的文档

时间:2019-07-03 07:52:22

标签: google-cloud-firestore firebase-security-rules

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;
      }
    }
  }
}

我想写一条规则,不允许第二次添加相同的文档。 这里有什么不正确的地方?

2 个答案:

答案 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);
          });
        }
      });

    });

  }