实时数据库规则 - 检查给定数组是否包含newData.val()

问题描述 投票:1回答:1

我的RTDB中有一个属性,它只能是以下之一:false, 5, 15, 30, 60

所以我试图以多种方式写这个条件而没有任何成功:

// Like in Firestore rules:
".write": "newData().val() in [false, 5, 15, 30, 60]"

// Like in ES6:
".write": "[false, 5, 15, 30, 60].includes(newData().val())"

// Like the old way:
".write": "[false, 5, 15, 30, 60].indexOf(newData().val()) > -1"

所以我最终得到了:

".write": "(newData.val() === false || newData.val() === 5 || newData.val() === 15 || newData.val() === 30 || newData.val() === 60"

有什么方法可以检查newData.val()是否等于上述值中的一个而没有太多的样板?

firebase firebase-realtime-database firebase-security-rules
1个回答
1
投票

压缩这种方法的一种方法是使用正则表达式。所以根据你的例子,你可以使用".write": "(newData.val()+'').matches(/^(false|5|15|30|60)$/)"

但是,您可能希望对数据类型更加严格,因此这样的事情将是理想的:".write": "newData.val() === false || (newData.isNumber() && (newData.val()+'').matches(/^(5|15|30|60)$/))"

这是演示行为的小提琴:http://jsfiddle.net/katowulf/m5gzt423/

© www.soinside.com 2019 - 2024. All rights reserved.