2015-12-07 66 views
1

我需要這個火力地堡規則的幫助,我有這樣的孩子,我存儲時間戳如何驗證servertimestamp是否低於Firebase本身的某個值?

enter image description here

我需要在服務器時間戳小於存儲,只允許在火力寫入到另一個位置在日期 - >日期的孩子。 我不確定如何在寫入或驗證過程中執行此操作,或者如何讓規則在Firebase本身中讀取特定值。

​​

UPDATE

我能夠從現在的位置讀取,但問題是鑄造爲comarison值。 我試過(整數)(整數)parseInt()數字(),他們都失敗

我在正確的軌道或應該做不同?

更新2 我設法寫的 - 即不產生了人爲錯誤的一個可接受的規則,但它不工作,這是

{ 
    "rules": { 
     "test":{ 
      ".write": "now < root.child('date/Date').val()", 
      ".read" : false 
     } 
    } 
} 

有什麼建議?

更新3

其實它並不能很好的工作,我認爲這是一個比較數量從「現在」功能來串來形式root.child.val,所以規則總是假。

我設法解決它,把這裏的解決方案,以防萬一有人需要它

"rules": { 
     "test":{ 
      ".write": "now + ' ' < root.child('date/Date').val() + ' '", 
      ".read" : read 
     } 
    } 

所以基本上我加入了(+'「)現在將其轉換爲字符串,並添加與val相同只是爲了使兩個字符串相比相同的長度。

回答

3

安全規則可以讀取Firebase數據庫中的數據。如果結合使用now變量和root變量,則可以檢查時間戳。

{ 
    "rules": { 
     "test":{ 
      ".write": "now < root.child('date').child('Date').val()", 
      ".read" : "now < root.child('date').child('Date').val()" 
     } 
    } 
} 

然後在你的代碼,你需要聽取消回調:

var ref = new Firebase("<my-firebase-app>/test"); 
ref.on('value', function(snap) { 
    console.log(snap.val()); 
}, function(error) { 
    // if permission is denied the error will log here 
    console.error(error); 
}); 

Check out the Firebase API reference for more info.

此外,使用在火力地堡應用信息中心的模擬器可以幫助你測試你的規則:

enter image description here

+0

再次感謝,你是非常有幫助的,真的很感激它。使用控制檯時是否應用規則?即使將其設置爲寫入:false,我仍然可以在使用Chrome控制檯時寫入位置。 –

+0

嗯,您正在通過Firebase App Dashboard打開控制檯進行編寫。是的,規則不適用於那裏,因爲你是管理員。 Firebase應用信息中心是一個具有Firebase數據庫管理權限的網絡應用。當您使用控制檯並創建參考時,您將獲得管理員的Web應用程序的本地權限。嘗試以隱身模式訪問數據或使用模擬器。 –

+0

非常感謝:) –