Защита базы данных Firebase в реальном времени не может быть закрыта - PullRequest
0 голосов
/ 09 мая 2018

Я пишу правило безопасности в firebase, чтобы проверить, существует ли запись или существует группа. Я полностью понимаю, что правила безопасности - это не фильтры, и я использую их не как фильтр, а как метрику проверки. Это правило, которое я пытаюсь реализовать ...

    "notifications": {
  ".read": "auth !== null",
  ".write": "auth !== null",
  ".indexOn": ["post_ID", "group_ID"],
  "$userID": {
    "$notifID": {
      ".validate": "newData.hasChildren(['has-seen', 'end-time', 'time', 'user_ID', 'username']) && $userID !== newData.child('sender_ID').val() && (root.child('groups').child(newData.child('group_ID').val()).exists() || root.child('follower-feed-storage').child(newData.child('post_ID').val()).exists())",
      ".write": "auth.uid !== $userID && !data.exists()",
    }
  }
},

Очевидно, что правило должно правильно оценивать условие hasChildren и $ userID! == newData.child ('user_ID'). Val (). Однако, когда он должен вычислить последнее выражение после && и внутри скобки, он будет либо успешным, либо неудачным на основании первого условия внутри скобки и не будет выполнять оператор or или вычислять второе выражение. Очевидно, что я делаю что-то не так с синтаксисом, но я не могу понять это. Любая помощь приветствуется заранее.

1 Ответ

0 голосов
/ 09 мая 2018

Вы должны передать string в .child, поэтому, если newData.child('group_ID').val() оценивается как null или undefined, то произойдет сбой. Попробуйте привести результат этого к string или проверить, существует ли он, прежде чем искать его. (Я рекомендую последнее.)

(newData.child('group_ID').exists() && root.child('groups').child(newData.child('group_ID').val()).exists())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...