当前位置: 首页 > 知识库问答 >
问题:

如何编写Firebase Cloud Firestore规则,以便在其他集合满足条件的情况下访问特定的集合文档?

洪建茗
2023-03-14

我的uidConnections集合是一个链表,其中uidrequest.auth.uidconnecteduid==specialevents.uid。

如何编写一个Firebase Cloud Firestore规则,其中用户只能访问uidConnections.connecteduid==specialEvents.uid和uidConnections.uid==request.auth.uid的specialEvents?

我现在在的地方...

function isSignedIn() {
  return request.auth != null;
}

match /specialEvents/{document=**} {
  allow read: if isSignedIn()
    && get(/databases/$(database)/documents/uidConnections).data.uid == request.auth.uid 
    && get(/databases/$(database)/documents/uidConnections).data.connectedUid == resource.data.uid;
}

共有1个答案

姚文轩
2023-03-14

如果我正确理解的话,您希望在您的安全规则中,在UIDConnections集合中找到一个验证不同对比的文档。

对于Firestore规则,这是不可能的,因为正如文档所解释的,“get()exists()函数都需要完全指定的文档路径”。换句话说,您不能在规则中执行查询,您需要预先知道要指向的文档的确切引用/路径。

一个解决方案是使用ConnectedUID的值作为文档的ID。如果你不能做到这一点,你将需要找到另一种方法。你在问题中提到的那个是一个可能的。如果您认为有可能达到一个Firestore文档的大小限制,请使用(子)集合。

 类似资料:
  • 我有一个收藏模型的典型结构。 在视图中,每个对象都有一个“编辑”按钮,该按钮应该取消激活其他对象的所有“编辑”按钮。 我想知道这样做的最佳做法是什么。谢谢!!

  • 问题内容: 我正在使用构建Web POST参数的方法,但是有一些值仅在它们不存在的情况下才想添加。 效果很好,但是如果我将变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码): 我希望这已经足够清楚了,有人知道如何解决吗? 问题答案: 创建初始字母后,您必须单独添加密钥: Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解: 但这不是很可读。 另一

  • 我有一个这样的数据框 我想把这些数据子集,得到美国、中国和印度这些年的国内生产总值。另一个问题是,假设我每年有200个国家的国内生产总值数据,而我只对50个国家感兴趣。如何子集数据?非常感谢!

  • 我需要为密码字段设置一个错误,条件是“只允许2到22个字符和符号,\-” 但是我有点困在这里了。 这是我到目前为止得到的: 但问题是,如果我输入了_或-以外的符号,错误消息仍然不会显示。对于输入长度,错误消息显示为它应该显示的样子。

  • 所以我现在的规则是这样的。 我的问题是,即使在写到子集合时,它是否会准确地检查用户是否在group1->doc->subcollection->doc-'members'中,或者在这种情况下,它是否会签入group1->doc->subcollection->doc-'members'? 因为members列表只在groups集合中,而不在子集合中,所以不希望出现第二种情况。

  • 问题内容: 我有一个发布功能,如下所示: 现在假设在某些时候对Projects进行了更改,结果是上面返回了一个不同的项目,因此Tasks.find将返回其他任务。但是,对项目所做的更改不会重新发布 任务 我已经使用了reactPublish,但事实证明该程序包存在问题(并且也没有任何单元测试)。因此,是否有一种简单的方法可以在项目更改时重新发布此发布功能? 问题答案: 通过调用安装软件包。 添加软