firebase - 在 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);
推荐阅读
- ios - 快速检测电源按钮按下事件
- excel - 从切片器中选择多个值
- python - 运行一个列表的总和,存储在一个新列表中 - python
- c# - 如何从 Firebase 获取数据快照一次且仅一次(使用 C#)?
- jupyter-notebook - 如何在 IPython 魔术命令后添加评论
- c# - 为什么我无法将 xamarin.ios 应用部署到我的设备?
- unit-testing - Spring集成测试流程异常
- javascript - Summernote 在合并段落后添加跨度
- python - 如何使for循环中的语句超时
- ios - 如何将 UIImagePickerController 限制为仅选择纵向模式(深度效果)照片?