首页 > 解决方案 > 子集合的 Firestore 规则

问题描述

我在 Firestore 上有一个带有“级别”子集合的“游戏”集合。我正在尝试设置安全规则,以便您只能访问您创建的游戏或关卡。

所有文档(游戏或关卡)都有一个authorId字段,其中包含创建它们的用户的 uid。我尝试了这个规则,但仍然出现Missing or insufficient permissions错误:

service cloud.firestore {
  match /databases/{database}/documents {    
    match /games/{document=**} {
        allow read, write: if document.data.authorId == request.auth.uid;
    }
  }
}

我错过了什么?

我也尝试了以下规则但没有成功:

service cloud.firestore {
  match /databases/{database}/documents {    
    match /games/{game}/levels/{level} {
        allow read, write: if level.data.authorId == request.auth.uid;
    }
  }
}

service cloud.firestore {
   match /games/{game} {
     allow read, write: if game.data.authorId == request.auth.uid;     

       match /levels/{level} {
          allow read, write: if level.data.authorId == request.auth.uid;
       }
    }
}

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


根据参考文档,资源是包含用户尝试写入的文档数据的对象。您使用它的数据属性来获取它的字段值。

service cloud.firestore {
  match /databases/{database}/documents {    
    match /games/{document=**} {
        allow read, write: if resource.data.authorId == request.auth.uid;
    }
  }
}

推荐阅读