Как сделать так, чтобы правила базы данных Firebase допускали только 10 приращений - PullRequest
0 голосов
/ 27 августа 2018

Мои пользователи будут увеличивать значение в базе данных на 10. Я попытался скопировать точный пример из документации, но я все еще получаю

"Имитация запрещена при записи"

в консоли тестирования.

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

{
"rules": {
"my-app": {
  "myapp": {
    ".read": "auth != null",
    ".write": "auth != null && newData.exists() && newData.val() === data.val() + 1",
        // Only authenticated users can read and write
                // and Prevents only Delete
    "totalbyallusers": {
            ".validate": "newData.isNumber()"
    },
  }
}
}
}

Если я удаляю newData.val() === data.val() + 1, тогда это работает. Я также пытался переместить newData.val() === data.val() + 1 в "totalbyallusers", но безрезультатно. По сути, я хочу, чтобы данные обновлялись только в том случае, если они увеличиваются на 10. Или, что менее предпочтительно, если это невозможно, тогда их можно проверить, если они заканчиваются нулем. Что я могу сделать?

Местоположение установлено на /my-app/myapp/, и данные таковы:

{
  "totalbyallusers" : 230
}

Я также пытался изменить местоположение на /my-app/myapp/totalbyallusers, но результат тот же.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Хорошо, поэтому я обнаружил, что я использовал «my-app» в качестве самого верхнего родителя, тогда как «my-app» было названием проекта и появлялось на моей вкладке «Данные» в Firebase, но не было включено в фактическую JSON. Поэтому я закомментировал это и использовал ту же технику +10, и на этот раз она сработала!

Спасибо всем пользователям, которые помогли мне в этом. Вот код, который работает:

{
"rules": {
//    "my-app": {
  "myapp": {
    ".read": "auth != null",
    ".write": "auth != null",
        // Only authenticated users can read and write
    "totalbyallusers": {
                ".validate": "newData.val() === data.val() + 10"
    }, // newData.val() % 10 === 0 // this also works but is not very safe.
  }
//    }
}
}
0 голосов
/ 28 августа 2018

Вот правило, применяемое к вашей переменной:

"totalbyallusers": {
      ".validate": "newData.isNumber()",
      ".read": "auth != null",
      ".write": "auth != null && (newData.val() != null && data.val() != null && newData.val() == data.val() + 10 || data.val() == null && newData.val() == 10)"
    }

Вы применяете правило к родителю вместо фактической переменной, которая вам нужна. Попробуйте, надеюсь, это сработает.

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