Как написать условие правил на основе входных данных в базе данных Firebase Realtime

У меня есть база данных 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",
      }
    }
  }
}

Кто-нибудь знает, что мне не хватает? Заранее спасибо!

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
0
425
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо «.child($uid)» попробуйте «.child(auth.uid)».

Это работает для меня (если я правильно понял ваш вопрос).

Ответ принят как подходящий

Переменные newData и data в безопасности — это моментальные снимки (новых) данных в узле, где объявлено правило. Таким образом, вам не нужно создавать весь путь к UserID, а вместо этого можно ссылаться на него напрямую.

Итак, вместо:

&& newData.child($level).child($uid).child('UserID').val() == auth.uid",

Использовать:

&& newData.child('UserID').val() == auth.uid",

Другие вопросы по теме