You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase安全规则如何根据Users集合admin属性控制Nouns集合写权限

问题原因
  • 规则中resource.data.admin的引用对象错误:resource指代的是当前你正在访问的Nouns集合下的目标文档,而非当前登录用户对应的Users集合文档,如果Nouns文档本身没有admin字段,就会抛出属性未定义的错误。
  • 重复定义了Nouns集合的匹配规则:Firebase Security Rules是「只要任意一个匹配块的条件满足就允许访问」,你写了两个match /Nouns/{documents=**}块,第一个块已经给所有登录用户开放了读权限,和你预期的权限逻辑不符。
  • 没有主动获取Users集合中当前用户的文档数据做admin属性校验:你需要手动拉取当前登录用户uid对应的Users文档,才能校验其admin字段值。
修正后的规则
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    match /Users/{userId}/{documents=**} {
      allow read, write: if request.auth != null 
                && request.auth.uid == userId
    }
    
    match /Nouns/{documents=**} {
      // 所有登录用户可读
      allow read: if request.auth != null
      // 仅自身Users文档admin为true的用户可写
      allow write: if request.auth != null
                && exists(/databases/$(database)/documents/Users/$(request.auth.uid))
                && get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.admin == true
    }
    
  }
}
规则说明
  • 用get()方法主动获取当前登录用户uid对应的Users集合文档,读取该文档的admin属性做校验
  • 增加exists()判断避免用户对应的Users文档不存在时抛出异常
  • 合并了Nouns集合的两个匹配块,避免规则冲突

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:18:01