В настоящее время я пытаюсь определить правила безопасности базы данных.Во время создания профиля пользователя я создаю объект обновления для базы данных в форме:
firebase.auth().onAuthStateChanged(firebaseUser => {
const currentkey= firebaseUser.uid;
var userCreateObject = {};
userCreateObject['users/' + currentkey + '/username'] = username;
userCreateObject['users/' + currentkey + '/email'] = email;
userCreateObject['users/' + currentkey + '/birthdate'] = birthdate;
userCreateObject['usernames/' + username] = currentkey;
userCreateObject['followed/' + currentkey + '/MAINITEM/item'] = item;
userCreateObject['filters/' + currentkey + '/MAINITEM/item'] = item;
//Start account for the user
firebase.database().ref().update(userCreateObject).then(function() {...})
...
});
Однако следующие правила безопасности приводят к сбою операции:
{
"rules": {
"filters": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
},
"followed": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
},
"usernames": {
".read": "true",
".write": "auth.uid != null && (!data.exists())"
},
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
}
Даже при простом тестировании«Пользователи» часть обновления, в разрешении отказано.В таком случае я хочу сказать, как правильно определить правила, чтобы они принимали создание указанного элемента, даже если он ранее не существовал, а позднее принимают изменения, сделанные пользователем, снова в формеобновления?
Кроме того, существует ли конкретный способ тестирования такого рода правил?Определяя их впервые, я выполнял симуляции в виде:
/ users / someuidImadeup
{
"username": "username",
"email": "email",
"birthdate": "birthdate"
}
, который работал правильно.И
/ users
{ "someuidImadeup":
{
"username": "username",
"email": "email",
"birthdate": "birthdate"
}
}
Не удалось.Поэтому я предполагаю, что обновления обрабатываются в этой форме.