我的数据库中有三种类型的集合。
我制作了一个“喜欢”文档,使其具有_user和_post属性,分别存储用户和帖子ID。
当前,我正在编写数据库规则,以便如果已经存在具有属性值_user且用户试图创建该对象的_post和具有该用户ID的_post的文档,则不会创建“ like”文档喜欢。
如何针对这种情况编写规则?
答案 0 :(得分:0)
我认为Firestore目前没有任何可强制执行此规则的规则。但是我确实对替代方法提出了一些建议:
1。使用云功能将类似用户ID复制到帖子中: 您可以设置一个Firebase Cloud Function,该功能在Like集合的Create操作中触发。这个Cloud Function将用户的ID写入名为like_users的帖子的数组中。然后,您可以有一条规则说:
允许创建:如果request.auth.uid不在get(/ databases / $(database)/ documents / Post / $(request.resource.data._post).data.like_users;
(仅此解决方案有问题,我认为不存在“不在”之类的东西,这需要一些研究)
2。检查是否存在带有Cloud Function的副本: 您可以设置一个Firebase Cloud Function,该功能在Like集合的Create操作中触发。在该函数中,您使用相同的用户和帖子ID查询“喜欢”文档。如果已有文档,则删除最新文档。
3。重组数据库: 您可以删除Like集合,而在Post集合上有一个名为“ like_users”的数组。这将需要您放置一条规则来检查用户是否存在于“ like_users”数组中,因此,我认为我们可能会遇到与备选方案1中相同的问题。您还需要制定规则,要求不允许该用户更新文档的其他字段。