【问题标题】:Expressions in firebase firestore security rulefirebase firestore 安全规则中的表达式
【发布时间】:2020-05-12 05:57:37
【问题描述】:

firebase 的使用和限制(quotas)部分明确表示,firebase firestore 安全规则将只允许每个请求的最大长度为1000expression。但它没有提及任何关于表达式。有人可以解释一下

1)什么是表达式?

2)如何评估表达式?

3)有什么方法可以减少求值表达式的长度?

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    关于未记录主题的好问题。我的理解如下:

    1) 任何被评估的东西

    2) 示例:

    match /somepath {
      allow update: if request.resource.data.counter == resource.data.counter + 1
    }
    

    这里有 10 个表达式

    • request.resource.data.counter => 4
    • resource.data.counter => 3
    • 1 => 1
    • == 和 + => 各 1 = 2

    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
    

    【讨论】:

    • 那么,假设我的安全规则中有两个更新语句,是否会在一个请求评估下考虑?
    猜你喜欢
    • 2021-10-26
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多