如何在Firebase中的列表项字段中要求唯一值,而不将该值作为关键字?

时间:2018-05-22 20:52:21

标签: validation firebase firebase-realtime-database firebase-security-rules

我使用Angular和Firebase制作了一个小聊天应用程序。我虽然遇到了一些独特的问题。该应用程序有公共频道,我希望频道的名称是唯一的。我正在使用密钥来强制独特性,但我想知道是否有更好的方法来做到这一点。这是我目前的验证规则。

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "public-channels": {
      "$name": {
        ".validate": "!root.child('public-channels').child($name).exists()"  
      }
    }
  }
}

以下是数据的示例

{
  "public-channels" : {
    "test1" : {
      "displayName" : "Test1"
    },
    "test2" : {
      "displayName" : "Test2"
    }
  }
}

您知道是否有解决此问题的方法,其中数据的结构可以像使用uid作为密钥的标准列表数据一样,并且仍然在数据库级别强制执行唯一性?

我想使用的数据格式如下:

{
  "public-channels": {
    "SomeUID": {
      "name": "Channel Name" // This value should be unique
    }
  }
}

想要这种结构背后的原因是有些字符不能用在一个值的路径中("。","#", " $"," ["或者"]")我想在频道名称中允许这些字符。

0 个答案:

没有答案