【问题标题】:I can't apply a rule for a map field in firestore我无法为 Firestore 中的地图字段应用规则
【发布时间】:2021-01-05 21:19:33
【问题描述】:

我尝试验证用户在“喜欢”字段中输入的值是否为零:

request.resource.data.likes.size() == 0

规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{post}
    {
      allow read :if request.auth != null;
      allow create : if request.auth.token.firebase.sign_in_provider != 'anonymous'
      && request.resource.data.uid == request.auth.uid
      && request.resource.data.size() == 8
      && request.resource.data.hasOnly(['withPhoto','uid', 'text', 'tags','imageUrl', 'imageThump', 'comments', 'likes'])
      && request.resource.data.likes.size() == 0;
    }
  }
}

但是当我通过应用程序尝试它时,它给了我以下错误:

[cloud_firestore/permission-denied] 调用者无权执行指定操作。

当我删除request.resource.data.likes.size() == 0 行时,它起作用了。

这段代码描述了我如何添加 poss:

      Set<String> tags = _getTags(postText.toString().split(' '));
      FirebaseFirestore firestore = FirebaseFirestore.instance;
      await firestore.doc("posts/" + uuid).set({
                "uid" : uid,
                "likes":{},
                "comments":{},
                "tags": tags.toList(),
                "text": postText,
                "imageUrl": imageUrl,
                "imageThump": imageThumpUrl,
                "withPhoto": withPhoto
      });

【问题讨论】:

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


    【解决方案1】:

    我已经为你的问题苦苦挣扎了大约半个小时。很抱歉,我无法为您找到答案。但我确实想给你一些建议。

    Firestore 规则部分有一个非常好的功能,称为“规则游乐场”。在这里您可以测试您的规则并查看您的规则拒绝您访问的确切位置。

    希望你能弄明白,祝你好运。

    【讨论】:

      【解决方案2】:

      错误在另一个规则中

      request.resource.data.size() == 8
      && request.resource.data.hasOnly(['withPhoto','uid', 'text', 'tags','imageUrl', 'imageThump', 'comments', 'likes'])
      && request.resource.data.likes.size() == 0;
      

      必须是:

      && request.resource.data.keys().size() == 8
            && request.resource.data.keys().hasAll(['withPhoto','uid', 'text', 'tags','imageUrl', 'imageThump', 'comments', 'likes'])
      && request.resource.data.likes.keys().size() == 0;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-13
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多