Firebase 安全规则 - 防止重复好友请求
Firebase Security Rules - prevent duplicate friend request
对于我的 iOS 应用程序,我允许用户发出朋友请求,原则上类似于 Facebook 朋友请求。因此,某人可以有 x 个朋友。
我想阻止用户向同一用户发送多个好友请求,并希望通过在数据库规则中添加验证规则来做到这一点 -(我还没有探索过拥有的选项另一个列表)
我目前的验证规则是防止用户向自己发送好友请求。
下面是数据库的结构,我需要在其中检查 'fromUid' 和 'toUid' 的值是否不成对存在。
"requests" : {
"-KUr12h72I4T2WiI4JG0" : { // autoChildId
"fromUid" : "etOdpR0wpKYNFrIP7BNirhCYuYo1",
"toUid" : "UeATHfKdjVYunsOt8L0TGxfCBTQ2"
}
我的当前规则阻止用户向自己发送好友请求
"requests": {
".read": "auth != null",
"$autoID": {
".validate": "newData.child('fromUid').val() != newData.child('toUid').val()"
}
},
那么我如何验证 'fromUid' 值和 'toUid' 值不成对存在?即此好友请求尚未发出。
这是我对安全规则的失败尝试:
".validate": "&& newData.child('fromUid').val() + newData.child('toUid').val() !== data.child('fromUid').val() + data.child('toUid').val() && newData.child('toUid').val() + newData.child('fromUid').val() !== data.child('toUid').val() + data.child('fromUid').val()"
如果您需要更多信息或澄清,请告诉我
谢谢
好的(和正确的)数据库结构是项目的一半以上。如果你设计的数据库结构不好,你就会遇到大麻烦,尤其是当你使用 NOSQL 数据库时。如果您事先花时间设计数据库,您以后会很高兴。
你应该设计项目,事先想好你需要什么操作,你想如何展示数据,谁有什么角色,并根据它设计你的firebase数据库。
我的建议是阅读以下有关从 firebase 文档构建数据的页面。
https://firebase.google.com/docs/database/web/structure-data
关于您的问题
我建议通过 fromUid
修改数据库结构和组 toUid
s。
{
"requests": {
// user Ids who sent request
"userId1": {
// receiver ids
"userId2": true,
"userId3": true,
"userId4": true
},
"userId2": {
"userId3": true,
"userId4": true
}
}
}
这里不可能有重复的请求。您唯一需要做的检查是用户无法向自己发送请求。
这是相关规则。
"requests": {
".write": "auth != null",
"$senderId": {
"$receiverId": {
".validate": "$senderId !== $receiverId"
}
}
}
使用此结构,您还可以轻松地进行其他操作。例如获取 fromUid
的所有请求。检查 userId1
是否向 userId2
发送了请求,等等
对于我的 iOS 应用程序,我允许用户发出朋友请求,原则上类似于 Facebook 朋友请求。因此,某人可以有 x 个朋友。
我想阻止用户向同一用户发送多个好友请求,并希望通过在数据库规则中添加验证规则来做到这一点 -(我还没有探索过拥有的选项另一个列表)
我目前的验证规则是防止用户向自己发送好友请求。
下面是数据库的结构,我需要在其中检查 'fromUid' 和 'toUid' 的值是否不成对存在。
"requests" : {
"-KUr12h72I4T2WiI4JG0" : { // autoChildId
"fromUid" : "etOdpR0wpKYNFrIP7BNirhCYuYo1",
"toUid" : "UeATHfKdjVYunsOt8L0TGxfCBTQ2"
}
我的当前规则阻止用户向自己发送好友请求
"requests": {
".read": "auth != null",
"$autoID": {
".validate": "newData.child('fromUid').val() != newData.child('toUid').val()"
}
},
那么我如何验证 'fromUid' 值和 'toUid' 值不成对存在?即此好友请求尚未发出。
这是我对安全规则的失败尝试:
".validate": "&& newData.child('fromUid').val() + newData.child('toUid').val() !== data.child('fromUid').val() + data.child('toUid').val() && newData.child('toUid').val() + newData.child('fromUid').val() !== data.child('toUid').val() + data.child('fromUid').val()"
如果您需要更多信息或澄清,请告诉我 谢谢
好的(和正确的)数据库结构是项目的一半以上。如果你设计的数据库结构不好,你就会遇到大麻烦,尤其是当你使用 NOSQL 数据库时。如果您事先花时间设计数据库,您以后会很高兴。
你应该设计项目,事先想好你需要什么操作,你想如何展示数据,谁有什么角色,并根据它设计你的firebase数据库。
我的建议是阅读以下有关从 firebase 文档构建数据的页面。
https://firebase.google.com/docs/database/web/structure-data
关于您的问题
我建议通过 fromUid
修改数据库结构和组 toUid
s。
{
"requests": {
// user Ids who sent request
"userId1": {
// receiver ids
"userId2": true,
"userId3": true,
"userId4": true
},
"userId2": {
"userId3": true,
"userId4": true
}
}
}
这里不可能有重复的请求。您唯一需要做的检查是用户无法向自己发送请求。
这是相关规则。
"requests": {
".write": "auth != null",
"$senderId": {
"$receiverId": {
".validate": "$senderId !== $receiverId"
}
}
}
使用此结构,您还可以轻松地进行其他操作。例如获取 fromUid
的所有请求。检查 userId1
是否向 userId2
发送了请求,等等