Правила Firebase для комментирования поста - PullRequest
0 голосов
/ 09 сентября 2018

Какими должны быть правила Firebase для комментариев к посту, похожему на Facebook.

Есть две вещи: Во-первых, комментировать может только авторизованный пользователь. Во-вторых, только пользователь, который прокомментировал, может удалить комментарий. Пользователь, который прокомментировал свой идентификатор, сохраняется в имени пользователя. enter image description here

1 Ответ

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

Я настоятельно рекомендую использовать Firebase Bolt для написания / компиляции правил безопасности базы данных Firebase.Структура данных может стать большой и сложной.Используя Язык болтов , вы сможете легко написать сложные правила доступа и структуры, которые можно будет повторно использовать для других шаблонов БД.

Ваши правила будут выглядеть примерно так:

path /comment/{postUid}/{commentUid} is Comment {
   read() { true }
   write() { isAuthor(this) || isAuthor(prior(this)) }
}

type Comment {
   text : String,
   username : String
}

isAuthor(value) { auth != null && value.username == auth.uid }

Обратите внимание на isAuthor(prior(this)) звонок.Это способ убедиться, что только автор может удалить комментарий.prior функция возвращает данные в том виде, в каком они были сохранены до текущего события (создание, обновление или удаление).

После использования инструмента firebase-bolt для компиляции правил в формат JSON вы получите:

{
  "rules": {
    "comment": {
      "$postUid": {
        "$commentUid": {
          ".validate": "newData.hasChildren(['text', 'username'])",
          "text": {
            ".validate": "newData.isString()"
          },
          "username": {
            ".validate": "newData.isString()"
          },
          "$other": {
            ".validate": "false"
          },
          ".read": "true",
          ".write": "auth != null && newData.child('username').val() == auth.uid || auth != null && data.child('username').val() == auth.uid"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...