【发布时间】:2018-05-17 02:28:28
【问题描述】:
我正在为我的 Firestore 数据库编写安全规则,但我可能编写了太多检查,授权自动失败。
例如特定路径的规则是
service cloud.firestore {
match /databases/{database}/documents {
match /pending/{userId} {
match /rate/{vendorId}/events/{eventId}/ratings/{rateId} {
allow write: if request.auth.uid == userId
&& exists(/databases/$(database)/documents/vendors/$(vendorId)) // The vendor must exist
&& exists(/databases/$(database)/documents/users/$(userId)/subscriptions/$(vendorId)) // The user must be subscribed to the vendor
&& exists(/databases/$(database)/documents/vendors/$(vendorId)/events/$(eventId)) // The event must exist
&& !exists(/databases/$(database)/documents/vendors/$(vendorId)/events/$(eventId)/ratings/$(userId)) // The user must not have already voted for the event
}
}
}
}
这些规则在写入 /pending/{userId}/rate/{vendorId}/events/{eventId}/ratings/{rateId}
时适用删除一个或多个规则组合会使一切恢复正常。 我在文档中阅读了关于 10 个开发人员定义的函数 here 的限制,但存在和 get 被列为服务定义,不应计算在内。就算有,这里我也只用了五个。
有没有更有效的方法来检查相同的字段?如何计算达到 10 个函数限制的单行数?
谢谢
【问题讨论】:
-
“10 限制”在这里不是一个因素。它在调用深度:调用深度限制为10个函数调用
-
感谢您的回复。我实际上不确定如何确定我的数据库规则的调用深度。只是搜索“呼叫深度”并没有返回很多信息,你能链接我一些可能有用的资源吗?即使是几个例子也足够了。
-
假设您编写了函数 A、B、C,其中 A 调用 B,B 调用 C。调用 A 的规则的调用深度为 3。调用深度不是问题的原因经历。您的帖子表明您可以注释掉任何一行并且该规则有效。对吗?
-
哦,好的,谢谢,这真的很简单!是的,评论任何一行都可以解决问题(还没有尝试过第一行)
-
我联系了支持人员,我会在获得更多数据后更新帖子。这确实很奇怪。再次感谢您的宝贵时间。
标签: firebase google-cloud-firestore firebase-security