我正在基于聊天构建一个有角度的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: ...
该消息必须遵循用户列表。
答案 0 :(得分:-1)
您想要在这里做些事情:
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()"
}
}
}