在 FIrestore 中设置安全规则时出现问题

Problem Setting up Security Rules in FIrestore

我不知道为什么我的安全规则不起作用。如果有人能找到其中的问题,那将非常有帮助。

我希望在聊天中发送消息的用户是唯一能够编辑或删除消息的人。聊天文档中 blocked array 中的用户无法发送任何消息。

这是我所做的:

    match /{document=**}{

        allow read, write : if false;
    }

    match /Chats/{ChatID}{
        allow read, write : if request.auth != null;
    }
    
    match /Chats/{ChatID}/Messages/{MessageID} {
        allow delete : if false;
      allow read: if request.auth != null;
    }
    
    match /Chats/{ChatID}/Messages/{MessageID}{
        allow delete, update : if resource.data.sender == request.auth.uid;
      allow create : if !(request.auth.uid in get(/databases/$(database)/documents/Chats/$(ChatID)).data.blocked);
    }

这两个好像都不行。任何人都可以删除消息,而且用户永远无法发送消息,无论它的 uid 是否存在于 blockList 中。

更新: 这是我要删除的文档。 这是我用来删除文档的代码:

FirebaseFirestore.getInstance().collection("Chats").document(CHAT_ID).collection("Messages").document(MSG_ID).delete();

您无法创建消息的原因是:

allow create : if !(request.auth.uid in get(/databases/$(database)/documents/Chats/$(ChatID)).data.blocked);

请改成这样:

allow create: if (request.auth.uid in get(/databases/$(database)/documents/Chats/$(ChatID)).data.blocked) == false;

任何人都可以删除的原因是:

allow delete, update : if resource.data.sender == request.auth.uid;

请改成这样:

allow delete, update : if (resource.data.sender == request.auth.uid);