【发布时间】:2020-05-12 05:57:37
【问题描述】:
firebase 的使用和限制(quotas)部分明确表示,firebase firestore 安全规则将只允许每个请求的最大长度为1000 的expression。但它没有提及任何关于表达式。有人可以解释一下
1)什么是表达式?
2)如何评估表达式?
3)有什么方法可以减少求值表达式的长度?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security
firebase 的使用和限制(quotas)部分明确表示,firebase firestore 安全规则将只允许每个请求的最大长度为1000 的expression。但它没有提及任何关于表达式。有人可以解释一下
1)什么是表达式?
2)如何评估表达式?
3)有什么方法可以减少求值表达式的长度?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security
关于未记录主题的好问题。我的理解如下:
1) 任何被评估的东西
2) 示例:
match /somepath {
allow update: if request.resource.data.counter == resource.data.counter + 1
}
这里有 10 个表达式
3) 只计算一次...
例子:
match /somepath {
allow update: if request.resource.data.notchange1 == resource.data.notchange1 => 8 expressions
&& request.resource.data.notchange2 == resource.data.notchange2 => 8
&& request.resource.data.test1 > 0 => 6
&& request.resource.data.timestamp == request.time => 7
&& request.resource.data.counter == resource.data.counter + 1; => 10
}
=> 39 expressions in total
更好的版本:
match /somepath {
allow update: if checkupdate(); => 1
function checkupdate() {
let mapafter = request.resource.data; => 3
let map = request.resource; => 2
return mapafter.notchange1 == map.notchange1 => 5
&& mapafter.notchange2 == map.notchange2 => 5
&& mapafter.test1 > 0 => 4
&& mapafter.timestamp == request.time => 5
&& mapafter.counter == map.counter + 1; => 7
}
=> 32 expressions in total
【讨论】: