2016-06-14 129 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

超越!感谢您的帮助和对服务器时间戳的参考! –