首页 > 解决方案 > Firebase 安全规则——使用用户文档中的属性

问题描述

我正在努力使我的 Firebase 安全规则发挥作用。我只想允许在用户文档(存储在集合中)中Nouns具有属性(布尔值)的用户对集合中的文档进行写访问。'admin' == trueUsers

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 
    }
    
    match /Nouns/{documents=**} {
      allow read, write: if request.auth != null 
                && resource.data.admin == true
    }
    
    
  }
}

当我尝试在Nouns集合中的文档上写入时,规则游乐场会出现以下错误:

错误:simulator.rules 行 [17],列 [13]。属性 admin 在对象上未定义。

谁能让我知道我做错了什么?

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


resource.data将包含在 Nouns 集合中被访问的文档的数据。如果要从用户文档中读取数据,请get()改用:

match /Nouns/{documents=**} {
  allow read, write: if request.auth != null 
                && get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.admin == true
}

集合名称区分大小写,因此请确保输入正确。


推荐阅读