在Firebase->数据库->规则中测试缺少的属性

时间:2019-04-12 21:54:48

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

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

  1. 未定义,表示模型道具只是缺少该属性,或者
  2. 设置为'draft'或'completed'

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

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

也就是说,如果课程没有write属性,或者该属性不等于“已完成”,则允许status。 条件的第二部分没有问题,问题在于,第一部分始终会导致典型的 ERROR FirebaseError:缺少权限或权限不足

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

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

而且,===在编辑器中在语法上根本无效。知道如何测试缺少的属性并获得正确的true / false值吗?

1 个答案:

答案 0 :(得分: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,它们可以在操作之后或之前检查给定密钥是否存在于文档中。