Firebase实时数据库规则配置求助:仅为指定节点设置规则,其余节点保持全读写权限
Firebase实时数据库规则配置求助:仅为指定节点设置规则,其余节点保持全读写权限
你遇到的问题核心是规则的路径定位和优先级问题,我来帮你理清思路并给出解决方案:
首先,你之前的两种写法都有小问题:第一种只给Devices节点设了规则,但全局没开放其他路径的权限;第二种虽然开了全局权限,但规则没精准定位到Devices/{number}这个动态子节点,导致设备节点的限制规则没生效。
Firebase的规则逻辑是更具体的路径规则会优先覆盖父级/全局规则,所以我们需要把限制精准绑定到Devices/{number}这个层级,同时保留全局的全读写权限。
正确的规则配置应该是这样:
{ "rules": { // 全局默认:所有未被特殊规则匹配的路径,保持全读写权限 ".read": true, ".write": true, "Devices": { "{number}": { // 仅对Devices下的单个设备节点生效:只能创建新节点,无法修改/删除已有节点 ".write": "!data.exists()" } } } }
我给你拆解下这个配置的作用:
- 全局的
.read和.write设为true,确保除了Devices/{number}之外的所有节点都能自由读写; - 针对
Devices/{number}这个动态路径单独设置写规则,因为它的路径更具体,会覆盖全局的write规则; !data.exists()的逻辑是:只有当该设备节点还不存在时才能写入数据,一旦创建完成,后续就无法修改或删除这个节点,完全符合你想要的限制效果。
如果需要保持设备节点的读权限和全局一致,不用额外设置,因为子节点会自动继承父级(全局)的.read: true规则,读权限依然是开放的。
备注:内容来源于stack exchange,提问作者Nina
相关产品推荐
相关产品推荐

