【问题标题】:Firebase Getting Data From Maps In RulesFirebase 从规则中的地图获取数据
【发布时间】:2022-01-20 21:35:11
【问题描述】:

所以我有一个具有以下结构的 Firestore 数据库,其中角色位于 ma​​p 对象中。

/users
   userid1 
      roles = ["user":true]
   userid2
      roles = ["user":true,"admin":true]
/cars
   car1
     name = "Car 1"
   car2
     name = "Car 2"

现在我正在编写 Firebase 规则以确保我的数据安全且只有管理员可以访问

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    function getRole(role){
     return get(/databases/$(database)/documents/users/$(request.auth.uid).data.roles[role])
    }
    
    match /cars/{carID} {
      allow read: if request.auth !=null;
      allow create,update,delete: if getRole('admin') ;
    }

我正在尝试使用以下代码,但它允许为具有管理员角色的用户更新/创建。
Firebase 也会告诉我一个警告

“无效类型。收到 [path] 之一。预期 [map] 之一。”
所以我想知道我哪里错了

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    您错过了以下行中缺少一个右括号,因此.data.roles 肯定不包含该文档的数据:

    return get(/databases/$(database)/documents/users/$(request.auth.uid).data.roles[role])
    //                                                                  ^
    

    尝试重构如下所示的行,以便您可以访问文档的数据属性:

    return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles[role]
    

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 2017-07-15
      相关资源
      最近更新 更多