在 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);
我不知道为什么我的安全规则不起作用。如果有人能找到其中的问题,那将非常有帮助。
我希望在聊天中发送消息的用户是唯一能够编辑或删除消息的人。聊天文档中 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);