Использование newData для обновлений в правилах безопасности Firebase - PullRequest
0 голосов
/ 22 января 2019

У меня проблемы с использованием newData в правилах безопасности Firebase при выполнении операции обновления.

Вот моя структура данных:

enter image description here

А вот мои правила:

{
  "rules": {
    "videos": {
        "$videoId": {
            "data": {
                "content": {
                    "srcURL": {
                        ".write": "root.child('videos/' + $videoId + '/tokens/' + newData.child('/videos/-1vidid/requestToken').val() + '/read' ).exists()"
                    },
                },
                "meta": {
                    "status": {
                        ".write": "root.child('videos/' + $videoId + '/tokens/testTok/read').exists()"
                    }
                }
            },
            "requestToken": {
                ".write": true,
            }
        }
    }
  }
}

Вот данные, которые я пытаюсь записать с помощью обновления:

 {
  "videos/-1vidid/data/meta/status": "uploaded", 
  "videos/-1vidid/data/content/srcURL": "https",
  "videos/-1vidid/requestToken": "testTok"
  }

А вот мои правила не выполняются, когда я пытаюсь использовать newData;

enter image description here

Обратите внимание, что он работает, когда я жестко кодирую токен ("testTok"), но когда я пытаюсь использовать новые данные, он не очищается.

Вот еще несколько попыток избавиться от "videos" и $ videoId ("-1vidid) от дочерних элементов newData:

enter image description here

enter image description here

Есть идеи, почему newData не работает над обновлениями?

1 Ответ

0 голосов
/ 22 января 2019

Ваши соответствующие правила:

root.child('videos/' + $videoId + '/tokens/' + newData.child('/videos/-1vidid/requestToken').val() + '/read' ).exists()"

Переменная newData относится к новым данным в текущем местоположении .В месте, где вы определили правило, нет дочернего элемента /videos.

Я предполагаю, что вы хотите начать чтение из корня.В этом случае вы можете либо использовать root, который предоставляет вам существующие данные в корне, либо использовать newData.parent().parent()... (повторяется для всех уровней, которые вам нужно пройти) для получения обновленных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...