Firebase规则配置求助:开放OCCUPANCY字段写入权限遇权限拒绝
搞定Firebase Realtime Database特定字段可写、其余只读的权限配置
问题背景
最近处理一个流浪人员/应急避难所数据集的Firebase权限配置,需求很明确:所有数据都能读,但只有OCCUPANCY字段允许写入。一开始参考社区帖子写了下面的规则:
{ "rules": { ".read": true, "locations": { "$location": { "OCCUPANCY": { ".read": true, ".write": true }, "$other": { ".read": true, ".write": false } } } } }
在Firebase模拟器里测的时候一切正常,但放到网站控制台执行更新时,直接抛出权限错误:
Uncaught (in promise) Error: PERMISSION_DENIED: Permission denied
揪出问题根源
折腾了半天终于发现,原来更新代码里同时修改了OCCUPANCY、time和updated三个字段!初始规则里time和updated被$other匹配,写入权限被禁用了。Firebase的更新是原子操作,只要有一个字段没权限,整个操作就会失败,难怪报权限拒绝。
最终可行的规则配置
知道问题在哪就好办了,调整规则开放time和updated的写入权限,另外嵌套里的.read规则其实是冗余的(根节点已经设了全局可读,子节点会继承),直接删掉就行。最终规则如下:
{ "rules": { ".read": true, "locations": { "$location": { "OCCUPANCY": { ".write": true }, "time": { ".write": true }, "updated": { ".write": true }, "$other": { ".write": false } } } } }
这样配置后,既满足了“仅指定字段可写”的核心需求,又适配了实际更新操作涉及的字段,权限错误再也没出现过。
内容的提问来源于stack exchange,提问作者fstep
相关产品推荐
相关产品推荐

