У меня есть база данных Firebase Realtime, которая записывается в прогнозируемой структуре.
Есть ли способ проверить, используя правила, что UID аутентифицированного пользователя соответствует одному из входных значений данных?
Я знаю, что это можно проверить, используя значения из древовидной структуры, но в моем случае я хочу сравнить UID с данными во входном JSON.
Например, в моем случае входные данные находятся в следующей структуре данных JSON:
{ "UserID": "SOME_UID", "UserName": "SOME_USERNAME", "CompletionMoves": 3, "CompletionTime": 12.345 }
И он публикуется в месте, которое включает в себя имя уровня, а затем UID пользователя, похожее на /Level3/SOME_UID
.
Я хочу убедиться, что UID пользователя равен значению UserID в данных.
Я подумал о том, чтобы попробовать следующую логику правила, но по какой-то причине он не проходит тесты в строке сравнения uid:
{
"rules": {
"$level": {
"$uid" : {
".read": "auth != null",
".write": "auth != null
&& newData.child($level).child($uid).child('UserID').val() == auth.uid",
}
}
}
}
Кто-нибудь знает, что мне не хватает? Заранее спасибо!
Вместо «.child($uid)» попробуйте «.child(auth.uid)».
Это работает для меня (если я правильно понял ваш вопрос).
Переменные newData
и data
в безопасности — это моментальные снимки (новых) данных в узле, где объявлено правило. Таким образом, вам не нужно создавать весь путь к UserID
, а вместо этого можно ссылаться на него напрямую.
Итак, вместо:
&& newData.child($level).child($uid).child('UserID').val() == auth.uid",
Использовать:
&& newData.child('UserID').val() == auth.uid",