2016-11-17 38 views
1

這套規則是工作的罰款,並給予輸出如預期爲什麼這兩組相同的Firebase規則的工作方式非常不同?

{ 
"rules": { 
    "intents" : { 
    ".read" : "auth.uid === data.child('to').val()", 
    ".write" : true 
    }, 
    "messages" : { 
    ".read": "auth.uid !== null", 
    "$message": { 
      ".write": true 
    } 
    } 
} 
} 

但是,這套規則沒有允許任何用戶讀取任何數據,但寫操作在這組的工作也沒關係。

{ 
"rules": { 
    "intents" : { 
    ".read" : "auth.uid === data.child('to').val()", 
    ".write" : true 
    }, 
    "messages" : { 
    "$message": { 
      ".read": "auth.uid !== null", 
      ".write": true 
    } 
    } 
} 
} 

對我來說,這兩組外觀幾乎一樣。是否有我缺少的「Firebase安全規則」規則?

備註這兩個規則都經過測試,未對數據庫或任何代碼進行任何更改。只有顯示的規則被修改。

+0

[安全規則不是濾波器(https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters); – Kato

回答

2

這兩套規則有一個重要的區別:第一個規則允許在一個操作中讀取「消息」,而另一個允許一次只讀取任何單個消息。你可能試圖在一個操作中讀取所有消息,只有第一條規則纔會讓你這樣做。

{ 
    "rules": { 
    ... 
    "messages" : { 
     ".read": "auth.uid !== null", // Here: Can read all at once 
     "$message": { 
     ".read": "auth.uid !== null", // Here: Can only read one at a time 
     ".write": true 
     } 
    } 
    } 
} 
+0

我在android中使用recyclerviewadapter來讀取消息。但在第二種情況下,我甚至無法閱讀一條消息,儘管在第一種情況下,該應用工作正常並正確顯示所有消息。 –

+0

我從來沒有聽說過recyclerviewadapter。它如何得到你的消息?你確定它不會嘗試讀取所有的消息嗎? – ArneHugo

+0

即使它一次讀取所有消息,它應該不會顯示至少一條消息,如情況2中所述(如您所說)? –

相關問題