В моей базе данных у меня есть следующая структура.
/ Игроки / UID {1,2,3, ... n} / для каждого UID ==> {Child1, Child2, ... Childn}
В правилах, в Чтобы защитить данные, я создал функцию между дочерними элементами, аналогичную приведенной ниже, однако задача операций записи не выполнена, и я не знаю причину. Кроме того, можете ли вы предложить что-то более безопасное и практичное для реализации?
{
"rules": {
".read": "auth != null",
".write": "auth != null && newData.child('Child1').val() * newData.child('Child1').val() * 1000000 + 1000 * newData.child('Child1').val() - 1000 === newData.child('Child2').val()"
}
}
Моя упрощенная функция записи описана ниже, где Child2 - это функция Child1;
public void WriteDatabase(float child1, int child2)
{
if (AuthController.Instance != null && AuthController.Instance.user != null)
{
uid = AuthController.Instance.user.UserId;
}
else
{
return;
}
LeaderBoardEntry entry = new LeaderBoardEntry(child1, child2);
Dictionary<string, System.Object> entryValues = entry.ToDictionary();
Dictionary<string, System.Object> childUpdates = new Dictionary<string, System.Object>();
childUpdates["/Players/" + uid + "/"] = entryValues;
reference.UpdateChildrenAsync(childUpdates).ContinueWith(task =>
{
if (task.IsCanceled)
{
UnityEngine.Debug.Log("Write database cancelled");
return;
}
if (task.IsFaulted)
{
UnityEngine.Debug.Log("Write database faulted");
return;
}
if (task.IsCompleted)
{
UnityEngine.Debug.Log("Write database completed");
}
});
}
Примечание. Функция записи хорошо работает по следующим правилам:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}