Firebase 实时数据库安全规则 - 如何进入第二个节点
Firebase Realtime Database Security Rules - How to get into second node
我正在为 firebase 实时数据库的安全规则而苦恼。我的数据库结构如下:
第一层有聊天功能。第二层是聊天伙伴(聊天伙伴的用户 ID 的串联字符串)。在第三层你有信息。在最后一层有变量 datetime、userid 和 message。
我的问题是,如何进入第二个子节点,例如检查 auth.uid 是否在连接字符串中。我的想法是,如果用户 ID 在 chatpartners 字符串中,则授予用户读取权限,以确保只有 chatpartners 可以阅读他们的消息。或者这是一个思维错误?
我尝试了很多东西,但是没有成功:
"Chats":{
".read": "root.child('Chats').val().contains('auth.uid')"
}
#更新
{
"rules": {
"Chats": {
"$chatid": {
".read": "$chatid.contains(auth.uid)",
".write": "auth != null"
}
},
"Suchencards": {
".read": "true",
".write": "auth != null"
},
"UserData": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
我在 firebase 控制台上使用 playground 来检查我得到的是真还是假,但是在那种情况下我得到的是假。
#更新 2
Screen1
Screen2
如果您知道数据的确切路径,您只能访问规则中的数据,因此您将无法通过 /Chats
上的规则访问所有聊天。尝试这样做通常意味着您试图在错误的级别上定义规则。
例如,如果您希望允许用户阅读 Chats
的特定子项,则需要在该级别定义规则:
"Chats":{
"$chatid": {
".read": "$chatid.contains(auth.uid)"
}
}
虽然以上方法适用于访问特定房间,但您无法使用它来查询用户有权访问的所有聊天室(因为 Firebase 查询不支持“包含”操作) .在这里查看我的回答中的 userChatrooms
节点,以获得更好的跟踪用户聊天室的模型:
我正在为 firebase 实时数据库的安全规则而苦恼。我的数据库结构如下:
第一层有聊天功能。第二层是聊天伙伴(聊天伙伴的用户 ID 的串联字符串)。在第三层你有信息。在最后一层有变量 datetime、userid 和 message。
我的问题是,如何进入第二个子节点,例如检查 auth.uid 是否在连接字符串中。我的想法是,如果用户 ID 在 chatpartners 字符串中,则授予用户读取权限,以确保只有 chatpartners 可以阅读他们的消息。或者这是一个思维错误? 我尝试了很多东西,但是没有成功:
"Chats":{
".read": "root.child('Chats').val().contains('auth.uid')"
}
#更新
{
"rules": {
"Chats": {
"$chatid": {
".read": "$chatid.contains(auth.uid)",
".write": "auth != null"
}
},
"Suchencards": {
".read": "true",
".write": "auth != null"
},
"UserData": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
我在 firebase 控制台上使用 playground 来检查我得到的是真还是假,但是在那种情况下我得到的是假。
#更新 2
Screen1
Screen2
如果您知道数据的确切路径,您只能访问规则中的数据,因此您将无法通过 /Chats
上的规则访问所有聊天。尝试这样做通常意味着您试图在错误的级别上定义规则。
例如,如果您希望允许用户阅读 Chats
的特定子项,则需要在该级别定义规则:
"Chats":{
"$chatid": {
".read": "$chatid.contains(auth.uid)"
}
}
虽然以上方法适用于访问特定房间,但您无法使用它来查询用户有权访问的所有聊天室(因为 Firebase 查询不支持“包含”操作) .在这里查看我的回答中的 userChatrooms
节点,以获得更好的跟踪用户聊天室的模型: