Firestore 阻止用户及其帖子
Posted
技术标签:
【中文标题】Firestore 阻止用户及其帖子【英文标题】:Firestore blocking users and their posts 【发布时间】:2021-06-23 20:26:50 【问题描述】:我有一个社交媒体应用程序,它的 Firestore 结构中有以下集合:
UserActivity
--- Post 1 id
--- Post 1 data
--- Post 2 id
--- Post 2 data
--- Post n id
--- Post n data
这里的“UserActivity”是一个帖子集合,其中包含带有 id 的文档和文档内的键值对。其中一个键是“userRef”,它包含用户的 id,它是他的帖子。
现在我想屏蔽用户,一旦用户被屏蔽,他/她的帖子就不应该被看到。跟踪被屏蔽用户的结构是:
Blocked
--- User id 1
--- "Blocked user 1 id" : true
--- "Blocked user 2 id" : true
--- "Blocked user n id" : true
--- User id 2
--- "Blocked user 1 id" : true
--- "Blocked user 2 id" : true
--- "Blocked user n id" : true
“Blocked”是集合的名称。用户 ID 是其中包含密钥对的文档,其中说明了哪个用户已被该特定用户阻止。例如:用户 id 1 阻止了另一个用户 id 2 的用户。
现在我正在应用这些安全规则:
rules_version = '2';
service cloud.firestore
match /databases/database/documents
match /UserActivity/activity
allow read: if request.auth != null && !exists(/databases/$(database)/documents/Blocked/$(request.auth.uid)/$(request.resource.data.userRef)+'/true');
allow write: if request.auth != null;
我只想阅读未被我阻止的用户的帖子。但是这些规则并不能正常工作。
感谢任何帮助!谢谢
【问题讨论】:
将您的 Firestore 数据树显示为图像。 【参考方案1】:这最终取决于您如何阅读文档,因为条件读取要求用户有权访问集合中的所有文档以从内部列出/获取文档。见:Security Rules are not Filters
您必须改为过滤客户端上的文档,但要真正阻止用户阅读,您必须为每个用户及其帖子 ID 维护文档 ID 的索引集合,并使用集合组查询来读取它们以为每个用户找到相关的帖子 ID 并手动提取帖子,而不是简单地抓取您的帖子。
https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query
【讨论】:
以上是关于Firestore 阻止用户及其帖子的主要内容,如果未能解决你的问题,请参考以下文章
获取firestore中每个帖子的用户喜欢和总喜欢的所有帖子列表
获取喜欢帖子 Swift 和 Firestore 的用户列表
Flutter - 从 Cloud Firestore 读取嵌套地图
Java Firestore Android 在查询中使用数组列表来显示来自关注用户的帖子