Firebase安全规则 - 防止重复的朋友请求

时间:2016-10-24 14:48:14

标签: firebase firebase-realtime-database firebase-security

对于我的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()"

如果您需要更多信息或清晰度,请与我们联系 感谢

1 个答案:

答案 0 :(得分:3)

良好(和正确)的数据库结构超过项目的一半。如果您严重设计数据库结构,则会遇到大麻烦,尤其是在使用NOSQL数据库时。如果你事先花时间设计数据库,你会很高兴。

您应该设计项目并事先考虑您需要哪些操作,您希望如何显示具有哪些角色的数据并根据它来设计您的firebase数据库。

我的建议是阅读以下有关从firebase文档构建数据的页面。

https://firebase.google.com/docs/database/web/structure-data

关于您的问题

我建议通过toUid修改数据库结构和组fromUid

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