Firebase模拟和实际规则不同

时间:2017-08-21 09:55:15

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

我正在使用firebase实时数据库并使用firebase-queryfirebase-document查询数据。我配置了一些规则,当在模拟器中运行时,读取被接受但在现实生活中读取ID被拒绝。必须在root中".read": true才能获得预期的结果。 注意:我正在使用polymerfire和Firebase js sdk,但是对于不同的东西,JS在外部文件上,我正在使用Bolt编译器编写规则。

规则

rules.bolt

 //Questions
 path /Question/{qid} {
  read() { true }
  write() { true}
 }

 //Users
 path /Users/{uid}/Profile {
  read() { true }
  write() { signedIn() && isUser(auth, uid) }
 }

 path /Users/{uid}/Metadata {
  read() { signedIn() && isUser(auth, uid) }
  write() { signedIn() && isUser(auth, uid) }
 }

 function signedIn (){ auth != null}

 function isUser (auth, userKey) {
  return auth.uid == userKey;
 }

rules.json

{
  "rules": {
    "Question": {
      "$qid": {
        ".read": "true",
        ".write": "true"
      }
    },
    "Users": {
      "$uid": {
        "Profile": {
          ".read": "true",
          ".write": "auth != null && auth.uid == $uid"
        },
        "Metadata": {
          ".read": "auth != null && auth.uid == $uid",
          ".write": "auth != null && auth.uid == $uid"
        }
      }
    }
  }
}

期望影响

初始化存储的值,只能从Questons/{{qid}}Users/{{uid}}/Profile(以及Users/{{uid}}/Metadata读取数据,如果用户看到他/她获胜的个人资料)并显示所有数据

现实

未使用时".read": true

Initializing stored value.

并且在模拟器读取中运行时,没有数据传入

使用时".read": true

Initializing stored value.
  Sync to memory.
  Updating data from Firebase value: {Metadata: {…}, Profile: {…}}
  Got stored value! {Metadata: {…}, Profile: {…}} {Metadata: {…}, 
  Profile: {…}}
Sync to memory.

和其他数据也会传入并显示。

我认为这是因为规则级联。

如果规则级联是如何使用Bolt解决这个问题,如果不是,那么该做什么?

0 个答案:

没有答案