消息数组的Firebase安全规则

时间:2014-10-23 14:23:13

标签: angularjs firebase angularfire firebase-security

我正在尝试根据收件人显示邮件列表但是现在,让我们保持简单。我只是想显示一个消息列表。

我的规则看起来像这样

{
"rules": {
  "communications" : {
    "$communication":{
      ".read" : true,
      ".write": true
    }
  }
}

出于某种原因,我的应用程序不想阅读它

fireRef = new Firebase(url);
fireRef.auth(MY_TOKEN);
commsRef = fireRef.child('communications')
$scope.communications = $firebase(commsRef)

只有当我的规则看起来像

时才有效
{
"rules": {
  "communications" : {
    ".read" : true,
    ".write": true
  }
}

但是这会导致问题,因为我想在我的通信的子节点上添加条件。类似的东西:

{
"rules": {
  "communications" : {
    ".read" : true, ### I would like to get rid of this line as well and have the child handling it
    ".write": true,

    "$communication":{
      ".read" : "data.child('to').val() == auth.uid"
    }
  }
}

我假设这是因为我在通信上有一个$ firebase,它需要一些读取或写入规则但是如何在添加新消息时获取事件

由于

1 个答案:

答案 0 :(得分:3)

关于安全规则,Firebase操作是全有或全无。

这意味着发送到客户端的数据列表永远不会完整,或者是完整服务器数据的过滤视图。因此,在使用第一组安全规则时,尝试加载/communications处的所有数据将失败,即使您确实有权读取{{1}处的子规则所管理的某些数据。 1}}。

要处理此用例,请考虑重新构建数据,以便每个通信都由收件人编制索引,即/communications/$communication,这将简化您的安全规则。

此外,您甚至可以让收件人只读该存储桶(即/communications/$recipient/$communication),同时允许任何人向该用户发送消息(即.read: auth.id == $recipient)。最后一条规则确保发送客户端经过身份验证并写入尚不存在的位置,例如新的推送ID。