javascript - Enforce user id for a field in Firebase Database using rules -
i want users able add posts using app. need know made each post client uses
this.firebaseapp.database().ref('posts/').push({ userid, text, timestamp:new date() }); technically though, modify client , send value userid, need database rule prevent this.
the example user data on firebase site mentions:
{ "rules": { "users": { "$user_id": { // grants write access owner of user account // uid must match key ($user_id) ".write": "$user_id === auth.uid" } } } } i think want .write restriction since posts different dataset, don't want use post key, want refer value being passed in.
here's i've tried allows posts written still:
{ "rules": { ".read": "auth != null", ".write": "auth != null", "posts": { "userid": { ".write": "newdata.val() === auth.uid" } } } }
that first code snippet syntactically incorrect. let's assume meant:
this.firebaseapp.database().ref('posts/').push({ userid: userid, text: text, timestamp:new date() }); the rules want are:
{ "rules": { ".read": "auth != null", "posts": { "$postid": { ".write": "newdata.child('userid').val() === auth.uid" } } } } the key differences:
- i removed top-level
".write"rule. permission cascades down: once grant access @ level, cannot take away @ lower level. - i added
$postid, needed since rule needs apply child noders under/posts.$postidwildcard rule allow that. - i ensure have write permission individual post, since doing on
useridproperty not allow user write actual post anymore.
Comments
Post a Comment