Firestore规则,用于确定资源是否具有特定值的属性

问题描述 投票:0回答:1

我的数据库中有三种类型的集合。

  1. 用户
  2. 岗位
  3. 喜欢

我创建一个'like'文档,使其具有_user和_post属性,分别存储用户和帖子ID。

目前我正在编写一个数据库规则,如果已存在具有属性值_user且用户尝试创建对象的文档和具有用户喜欢的id的_post,则不会创建“like”文档。

我如何为这种情况编写规则?

firebase google-cloud-firestore firebase-security-rules
1个回答
0
投票

我不认为Firestore目前有任何规则可以强制执行此操作。但我确实对替代方法有一些建议:

1.使用云功能将类似用户ID复制到Post:您可以设置FireSet云功能,该功能在Like集合的Create操作上触发。此Cloud Function将用户的id写入名为like_users的帖子中的数组中。然后你可以有一个规则说:

允许创建:如果request.auth.uid不在get(/ databases / $(database)/ documents / Post / $(request.resource.data._post).data.like_users;

(只有这个解决方案的问题,我不认为有“不在”这样的事情,这需要一些研究)

2.检查云功能是否存在重复:您可以设置FireSet云功能,该功能在Like集合的Create操作上触发。在函数中,您查询具有相同用户和帖子ID的Like文档。如果文档已存在,则删除最新文档。

3.重构数据库:您可以删除Like集合,而在Post集合上有一个名为“like_users”的数组。这将需要您设置一个规则来检查用户是否存在于“like_users”数组中,因此我认为我们可能会遇到与替代方案1中相同的问题。您还需要制定规则,说明不允许用户使用更新文档的其他字段,这是可能的。

© www.soinside.com 2019 - 2024. All rights reserved.