firebase - Firebase 规则与孩子的数量不同
问题描述
我正在构建一个基于聊天的 Angular Firebase Web 应用程序。我的结构的简化示例:
|__ messages
|__ room1
|__ msg1
|__ author: ""
|__ message: ""
|__ user1: "user1"
|__ user2: "user2"
|__ user3: "user3"
|__ users
|__ room1
|__ user1: ...
|__ user2: ...
|__ user3: ...
我正在尝试编写规则“.write”来编写一条新消息(没有云功能),该消息必须有一个作者、一条消息和多个不同的用户 id(这里是 user1、user2、user3),它们在下面/users(= 不同的用户列表)。作者和消息没有问题,但我怎样才能改变部分?没有云功能甚至可能吗?
这就是这部分规则现在的样子:
"$other": {
".validate": "$other === newData.val() && root.child('users/'+newData.val()).exists()"
}
(如果你关注了我,那么你应该明白 $other 在我的示例中代表 user1、user2 和 user3)。
编辑:
基于上面的例子,假设用户 user4 加入了房间 1:
|__ messages
|__ room1
|__ msg1
|__ author: ""
|__ message: ""
|__ user1: "user1"
|__ user2: "user2"
|__ user3: "user3"
|__ users
|__ room1
|__ user1: ...
|__ user2: ...
|__ user3: ...
|__ user4: ...
现在一个用户写了一条消息:
|__ messages
|__ room1
|__ msg1
|__ author: ""
|__ message: ""
|__ user1: "user1"
|__ user2: "user2"
|__ user3: "user3"
|__ msg2
|__ author: ""
|__ message: ""
|__ user1: "user1"
|__ user2: "user2"
|__ user3: "user3"
|__ user4: "user4"
|__ users
|__ room1
|__ user1: ...
|__ user2: ...
|__ user3: ...
|__ user4: ...
消息必须遵循用户列表。
解决方案
你想在这里做一些事情:
- 该节点必须具有
user1
,user2
和user3
属性。 - 这些属性的值必须作为键存在
/users
您的规则的相关片段:
"messages": {
"$messageId": {
".validate": "newData.hasChildren('author', 'message', 'user1', 'user2', 'user3')",
"author": {
".validate": "newData.isString()",
}
"message": {
".validate": "newData.isString()",
}
"$other": {
".validate": "$other === newData.val() && root.child('users/'+newData.val()).exists()"
}
}
}
推荐阅读
- html - CSS left 属性值不适用于不同的窗口大小?
- java - 使用java 8将列表转换为地图
- python - 序列化用户实例以用于其他功能
- flutter - 如何根据不同的url在AppBar中显示不同的前导?
- xml - 来自另一个文件的 PowerShell XML 节点值 IF other Nodes -match
- python - TypeError:由名称('axis')和位置(2)给出的参数
- vue.js - Vuex 中的控制导航抽屉
- windows - CryptoNG:使用 BCryptExportKey 导出 RSA 密钥失败并出现 STATUS_INVALID_HANDLE
- python - 使用 spacy 加载自定义模型时出错
- g++ - 编译代码中无法解释的“没有这样的文件或目录”