【问题标题】:Testing on missing properties in Firebase -> Database -> Rules测试 Firebase 中缺失的属性 -> 数据库 -> 规则
【发布时间】:2019-04-12 21:54:48
【问题描述】:

在我的 Firebase -> 数据库 -> 规则编辑器中,我有一门课程的 write 操作匹配规则,用于测试 status 属性是否为:

  1. 未定义,意味着模型道具中缺少该属性,或者
  2. 设置,值为“草稿”或“已完成”

为了捕捉到这一点,我写了以下内容:

match /courses/{courseId} {
  allow write: if (resource.data.status == 'undefined' ||
                   resource.data.status != 'completed');
}

也就是说,如果课程没有status 属性,或者属性不等于“已完成”,则允许使用write。 条件的第二部分没有问题,问题是第一部分总是导致典型的ERROR FirebaseError: Missing or enough permissions

我在第一部分尝试了以下每种口味,但都没有成功:

resource.data.status == null
resource.data.status == undefined
resource.data.status == 'undefined'
typeof(resource.data.status) == undefined
typeof(resource.data.status) == 'undefined'

而且,=== 在编辑器中根本就在语法上无效。知道如何针对缺失的属性进行测试并获得正确的真/假值吗?

【问题讨论】:

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


    【解决方案1】:

    我最近在一个项目中需要这个并想出了这个功能:

    function isNotExisting(request, resource, key) {
      return !(key in request.resource.data) && (!exists(resource) || !(key in resource.data));
    }
    

    主要的技巧是使用key in resource.datakey in request.resource.data,在操作之后或之前检查给定的键是否存在于文档中。

    【讨论】:

    • 我一读到你的答案就明白了!将麻烦的部分重写为!('status' in resource.data) 为我做的!谢谢弗兰克:-)
    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 2021-07-09
    • 2017-07-15
    • 2021-04-19
    • 2020-05-26
    • 2020-12-28
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多