首页 > 解决方案 > 在 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();

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


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

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


推荐阅读