当前位置: 首页 > 知识库问答 >
问题:

Firebase规则:动态子节点的读取限制

耿学义
2023-03-14

我试图在一个有几个嵌套动态子节点的数据模型中实现Firebase rules read限制。

我有以下数据模型

/groupMessages/<groupId>/<messageId>/

{
    "senderId": "<senderId>",
    "recipientId": "<recipientId>",
    "body": "..."
}
{
    "rules": {
        "groupMessages"
           "$groupId": {
            ".read": "auth != null"
           }
        }   
    }
}

共有1个答案

辛可人
2023-03-14

正如您所发现的,安全规则不能用于筛选数据。但是可以使用它们来限制可以对数据执行哪些查询。

例如,您可以通过以下方式查询当前用户是发件人的所有邮件:

var query = ref.child("groupMessages").child(groupId).orderByChild("senderId").equalTo(uid);

您可以通过以下方式保护对组消息的访问,以只允许此查询:

{
  "rules": {
    "groupMessages": {
      "$groupId": {
        ".read": "auth.uid != null &&
            query.orderByChild == 'senderId' &&
            query.equalTo == auth.uid"
      }
    }
  }
}
userGroups: {
  uid1: {
    groupId1: true,
    groupId2: true
  },
  uid2: {
    groupId2: true,
    groupId3: true
  }
}

最后:这种类型的递归加载并不像许多开发人员最初认为的那样低效,因为Firebase通过现有连接将请求流水线化。

 类似资料:
  • 我当前的firebase结构如下所示 本来我的保安看起来 这一切都很好,因为我可以通过 然而,我想给这个分支增加更多的安全性,这样用户就不能通过写操作(读取是可以的)更新前端的代码来修改其中的一些条目。我希望用户能够根据isAdmin标志修改这些条目,例如, companyId(读:auth!=null,写:isAdmin==true) 因为所有读取=auth!=无效的起初,我认为因为我能够读取所

  • 规则 Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则: 通过 API 直接修改 (loadRules) 通过 DataSource 适配不同数据源修改 手动通过 API 修改比较直观,可以通过以下几个 API 修改不同的规则: FlowRuleManager.loadRules(List<FlowRule>

  • 我正试图用IOS和firebase建立一个聊天室。当我在firebase控制台的模拟器中测试时,一切正常,但在IOS应用程序中不工作。 我用的结构是这样的 root/members/room id/auth。uid/userdata root/messages/room_id/messages/message 我用IOS创建了一个新房间 并为该房间添加另一名成员(目前使用硬编码uid): 然后像这

  • 我遇到的问题是,使用下面显示的以下Firebase规则,经过身份验证的用户可以成功写入数据库,但无法从中读取,因为我在控制台中获得了“拒绝权限”。当我将读取和写入设置为true(公共)时,读取和写入功能都正常工作。我从数据库中读取的代码也显示如下: 规则: 示例数据库: 以下是确切的错误:

  • 我正在用flexbox做实验,并创建了这个布局。我试图让中间写着“嘿”的白色方框成为父方框的90%宽度/高度,但百分比似乎不会影响它。(我把它设置为100px/100px目前工作) 这很奇怪,因为父节点在检查时有一个定义的宽度/高度。 有人能告诉我如何实现吗?(此外,对我如何使用flexbox的一般批评也很赞赏) http://jsfiddle.net/yv3Lw5gy/1/ 相关类别:

  • 有没有一种方法可以通过使用集合名称变量来概括它