I have no Idea, why Setvalue() works with map object(static data) and throws permission denied as exception when using plain java object with dynamic data(POJO).
Works: Saving data using Map object
Map newUserData = new HashMap();
newUserData.put("Name", getUserName());
newUserData.put("Surname",getUserName()+"_testSurname");
newUserData.put("Gender","Gender_data");
newUserData.put("PhotoURL","");
adding metadata failed com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied:
Saving data using POJO
public class MetaInfo {
private String Name, Surname,Gender,PhotoURL;
public MetaInfo() {}
public MetaInfo(String name, String surname, String gender, String photoURL) {
Name = name;
Surname = surname;
Gender = gender;
PhotoURL= photoURL;
}
public String getPhotoURL() {
return PhotoURL;
}
...
...
..
Adding data using MetaInfo object:
MetaInfo mData= new MetaInfo(name.getText().toString(),
surname.getText().toString(),
gender.getText().toString(),
"");
Calling setvalue() with map object works however, permission deined with when MetaInfo object with valid data is used.
DatabaseReference.child(getUid()).child("metadata").setValue(mData).addOn CompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.i(TAG,"metadata added ");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG,"adding metadata failed "+e.toString());
}
});
@Override
FB-rules
rules": {
"test":{
"$UID":{
// METADATA
"metadata":{
".read":true,
".write":"auth.uid === $UID",
".validate":"newData.hasChildren(['Name','Surname'])",
"Name":{
".validate":"newData.val()!== null"
},
"Surname":{
".validate":"newData.val()!== null"
},
"$other":{
".validate": true
}
}