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 修改数据库结构和组 toUids。

{
    "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 发送了请求,等等