在我的Firestore文档中,我试图将用户可以更新的字段限制为仅允许的字段。我想到了一个可以检查request.resource.keys()
是否包含我不允许的键的函数,如果允许,我将阻止update
,如果不允许,则允许update
。到目前为止,我的功能如下:
function field_limit() {
let allow_keys = ["field1", "field2", "field3"];
return request.resource.keys() in allow_keys;
}
在路径匹配中:
allow update: if field_limit();
当我在模拟器中运行修改“ field1”的单元测试时,它没有通过。我认为我在这里做错了,因为我正在将整个keys
列表与allow_keys
列表进行比较。
那我该怎么做才能获得所需的功能?
我想到了一个通过request.resource.keys()
进行迭代的解决方案,并查看每个键是否为in allow_keys
。如果不是,则阻止update
。但是如何遍历列表的每个值?
编辑 。应该是request.resource.data.keys()
而不是request.resource.keys()
。否则,它将无法正常工作。
答案 0 :(得分:3)
in
运算符无法按您期望的方式工作。为此,请参见documentation-它仅检查列表中是否有单个值。
如果要检查值列表是否仅包含另一个列表中值的子集,则应改用hasOnly。
request.resource.keys().hasOnly(allow_keys)
如果列表request.resource.keys()
仅包含allow_keys
列表中的值,则它将为true。