在我的Firebase->数据库->规则编辑器中,我有一门针对write
op的匹配规则,该课程测试status
属性是否为:
为捕捉这一点,我写了以下内容:
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值吗?
答案 0 :(得分:1)
我最近在一个项目中需要此功能,并提出了以下功能:
function isNotExisting(request, resource, key) {
return !(key in request.resource.data) && (!exists(resource) || !(key in resource.data));
}
主要技巧是使用key in resource.data
或key in request.resource.data
,它们可以在操作之后或之前检查给定密钥是否存在于文档中。