适用于社交应用的Firebase规则

时间:2018-04-29 10:56:52

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

我正在尝试扩展social android aap,目前其规则是公开的,其数据结构是这样的,

{
  "posts" : {
    "postId1" : {
      "authorId" : "abcd",
    },
    "postId2" : {
      "authorId" : "abcd",

    },
    "postId3" : {
      "authorId2" : "wxyz",

    },
    "postId4" : {
      "authorId2" : "wxyz",
    }
  }
}

我想允许经过身份验证的用户在"帖子"中创建和删除自己的帖子。节点 我试过这个,

{
  "rules": {
        ".read":"auth.uid != null",
        ".write":false,
      "questions": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
}}

但是这不允许用户创建帖子,尽管用户可以编辑或删除他预先存在的帖子"帖子"节点,似乎在"帖子中没有写入权限。节点。 但如果我允许#34;帖子"然后由于级联规则,每个经过身份验证的用户都可以访问其他人的数据。如何实现我想要的功能?

1 个答案:

答案 0 :(得分:0)

首先请参阅firebase-bolt以编写实时数据库规则:https://github.com/firebase/bolt

此工具可以轻松编写规则。

对于您的规则,这里有一个示例,只允许作者更新帖子:

{
  "rules": {
    ".read": "auth.uid != null",
    "posts": {
      "$postId": {
        ".write": "data.val() == null && newData.child('uid').val() == auth.uid || data.val() != null && newData.val() != null && data.child('uid').val() == auth.uid || data.val() != null && newData.val() == null && newData.child('uid').val() == auth.uid"
      },
      ".read": "auth.uid != null"
    }
  }
}

和firebase bolt等效物如下:

path / {
    read() {auth.uid != null}
}

path /posts {
    read() {auth.uid != null}
    /{postId}{
    create() { this.uid == auth.uid}
    delete() { this.uid == auth.uid}
    update() { prior(this.uid) == auth.uid}
    }
}