如何在不使用 get() 的情况下根据父集合中的字段实现对 firestore 子集合的控制?
How to achieve control over a firestore sub-collection depending on a field in a parent collection without using get()?
下面这段代码可以正常工作,但它会导致我的代码被额外读取,我正在获取存储在数据集合 (premiumUntill
) 中的值,以便 allow/block进入子集合。在检查位于父集合中的某个先前值的状态时,是否有任何其他方法不会导致额外读取,或者这是唯一的方法。
match /Data/{dataDocId}/SubData/{subdataDocId} {
allow get: if request.auth != null
allow create: if request.auth != null
&& get(/databases/$(database)/documents/Data/$(dataDocId)).data.premiumUntill > req.time
}
按文档读取(或每次成功查询)计费。使用 get()
或其他都没有关系。它仍然只是 相关文档 的一读。没有其他方法可以检查以前的值或检查动态内容。您将需要为阅读付费。
有关详细信息,请查看此文档:
如果您正在使用 get()
从其他文档中读取数据,那么您将被收取读取费用。另一种防止读取 Firestore 规则的方法是将 premiumUntill
存储在 Custom Claims 中。您需要一个 Cloud Function 来设置自定义声明,但最好的是您可以从任何其他 Firebase 服务(例如存储和实时数据库)访问 premiumUntill(如果您使用任何服务)。
下面这段代码可以正常工作,但它会导致我的代码被额外读取,我正在获取存储在数据集合 (premiumUntill
) 中的值,以便 allow/block进入子集合。在检查位于父集合中的某个先前值的状态时,是否有任何其他方法不会导致额外读取,或者这是唯一的方法。
match /Data/{dataDocId}/SubData/{subdataDocId} {
allow get: if request.auth != null
allow create: if request.auth != null
&& get(/databases/$(database)/documents/Data/$(dataDocId)).data.premiumUntill > req.time
}
按文档读取(或每次成功查询)计费。使用 get()
或其他都没有关系。它仍然只是 相关文档 的一读。没有其他方法可以检查以前的值或检查动态内容。您将需要为阅读付费。
有关详细信息,请查看此文档:
如果您正在使用 get()
从其他文档中读取数据,那么您将被收取读取费用。另一种防止读取 Firestore 规则的方法是将 premiumUntill
存储在 Custom Claims 中。您需要一个 Cloud Function 来设置自定义声明,但最好的是您可以从任何其他 Firebase 服务(例如存储和实时数据库)访问 premiumUntill(如果您使用任何服务)。