【问题标题】:can't read path variable in firestore rules无法读取 Firestore 规则中的路径变量
【发布时间】:2021-08-18 04:16:29
【问题描述】:

我有一些规则,例如:

    rules_version = '2';
service cloud.firestore {

    

  match /databases/{database}/documents {
         
    match /teams/{teamId} {
        allow read, write, delete, list: 
      if debug(teamId) in debug(request.auth.token.teams)
      
      allow create:
      if true;
      
    }
    
  }
}

我正在使用声明来控制访问。每个用户的令牌中都有一组团队。这部分工作正常。

基本上,teamId(来自路径)不存在。此变量的日志中没有打印任何内容。我不知道发生了什么事。是否有其他方法可以访问该 teamId 变量?


通过做一些日志,似乎访问 /teams/teamXXXX 我得到了多个规则命中。首先在 /database/default/documents/teams 上,然后在 /database/default/documents/teams/teamXXX 第一次通过规则失败,因为 {teamId} 未在该路径上定义。我需要以某种方式允许访问集合,同时限制对子文档的访问


看来我访问团队的方式可能会导致问题。我通过以下查询获得团队:

instance.collection("teams").where('owners',
            arrayContains: FirebaseAuth.instance.currentUser!.uid);

这必须在路径中没有 {teamId} 的情况下触发规则检查。我想把我的比赛声明包装起来:

match /teams/{document=**}
  allow read:
  if (request.auth.uid != "")

  match /teams/{teamId} {
        allow read, write, delete, list: 
      if debug(teamId) in debug(request.auth.token.teams)

      allow create:
      if true;

    }
}

我担心这只会允许所有文件。我被卡住了。

【问题讨论】:

  • 通过做一些日志,似乎访问 /teams/teamXXXX 我得到了多个规则命中。首先在 /database/default/documents/teams 上,然后在 /database/default/documents/teams/teamXXX 第一次通过规则失败,因为 {teamId} 未在该路径上定义。我需要以某种方式允许访问集合,同时限制对子文档的访问。
  • edit您的帖子包含您对问题的任何其他信息。避免在 cmets 中添加它,因为它们更难阅读并且更容易删除。帖子的编辑按钮就在帖子标签的下方。
  • 如果你有任何私有数据,我会建议像 thread 这样使用私有字段的实现。并且通过限制对子文档的访问来访问集合,我建议有一个单独的集合,其中包含您拥有的集合的名称和有关它们的简要数据。请检查它是否有帮助。你也可以看看这个documentation?
  • 我使用的是 FireStore 而不是 Firebase 实时数据库。我认为这不支持私有字段。

标签: google-cloud-firestore rules claims


【解决方案1】:

回答我自己的问题。

在对集合进行搜索/列表时,它仍然匹配 /teams/{teamId} 的规则,即使您没有通过 teamId 专门查询。

意思是像 instance.collections("teams").where(...) 这样的搜索仍然会匹配 /teams/{teamId}

在比赛中,{teamId} 将为空白。相反,您必须查看通过“资源”变量传入的输入参数。 “where”子句中的项目将出现在资源变量中。您必须使用资源数据来解决您的规则。

所以我不得不将“列表”规则与其他规则分开。

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 2018-11-25
    • 2023-04-09
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多