2016-06-14 130 views
0

如何爲允許的屬性設置規則?我只希望能夠爲用戶設置已創建和上次更新的屬性。我嘗試使用一個變量來捕獲未指定的值,但這給出了permission_denied錯誤。我假設,因爲它解析創建或lastUpdated作爲它的值。firebase只允許設置某些屬性

"u": { 
      ".read": true, 
      "$uid": { 
       ".write": "$uid === auth.uid", 
       ".validate": "newData.hasChildren(['created','lastUpdated'])", 
       "$other": { 
        ".validate": false 
       }, 
       "created": { 
        ".validate": "newData.isNumber()" 
       }, 
       "lastUpdated": { 
        ".validate": "newData.isNumber()" 
       } 
      }, 
     }, 

失敗的寫操作:

var userObj = { 
    uid: user['uid'], 
    created: new Date().getTime(), 
    lastUpdated: new Date().getTime() 
} 
database.ref('u/' + user['uid']).set(userObj); 
+0

可以顯示一個寫入操作失敗,這些規則,但你想成功嗎? –

+0

VAR userObj = { \t \t UID:用戶[ 'UID'], \t \t創建的:新的日期()的getTime(), \t \t LASTUPDATED:新的日期()的getTime() \t。} \t數據庫.ref('u /'+ user ['uid'])。set(userObj); –

回答

0

您要添加三個屬性的節點:uidcreatedlastUpdated。您的安全規則只允許createdlastUpdated

鑑於uid已經作爲重點,寫入也許應該是:

var userObj = { 
    created: new Date().getTime(), 
    lastUpdated: new Date().getTime() 
} 
database.ref('u/' + user['uid']).set(userObj); 

我還考慮用戶ServerValue.TIMESTAMP爲次,保證了服務器確定的時間戳和兩個值將是一樣的。

+0

超越!感謝您的幫助和對服務器時間戳的參考! –