Вопросы по правилам аутентификации базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 12 января 2020

Я кодирую сайт микроблогов на Firebase, к которому я очень новичок. Я храню информацию о пользователях (например, введение, изображения профиля) и сообщения, которые пользователи пишут, как показано ниже:

{
  "posts" : {
    "postid" : {
      "category": "xx",
      "content": "xx",
      "uid":"xx"
  }
  },
  "users" : {
    "uid" : {
      "intro" : "xx",
      "nickname" : "xx",
      "profile_picture" : "xx"
      }
  }
}

Я хотел бы сделать следующие правила:

  1. Любой зарегистрированный пользователь сможет оставлять сообщения, но только после этого сможет редактировать свои собственные сообщения

  2. Для информации о пользователях он сможет только публиковать / редактировать свои собственные сообщения.

Я установил правила безопасности базы данных, как показано ниже.

"users": {
  ".read": true,
  "$uid": {
      ".write": "auth.uid===$uid"
  },
},
"posts": {
  ".read": true,
  ".write": "auth!==null",
},

Вот несколько вопросов:

a. Это правило позволит любому плохому пользователю редактировать любой другой пост, который не принадлежит ему.

b. При попытке записи в узел пользователя в данный момент не существует дочернего узла UID, и пользователям не разрешено писать.

Как изменить правила базы данных, чтобы решить две проблемы? Я предпочитаю делать это без переписывания внешнего кода или изменения структуры базы данных ... хотелось бы получить совет здесь!

1 Ответ

0 голосов
/ 13 января 2020

Чтобы разрешить пользователям писать только свои собственные сообщения (или создавать новые сообщения с собственным UID), вы можете проверить значение поля uid в операциях записи:

"posts": {
  ".read": true,
  ".write": "auth !== null && auth.uid === newData.child('uid').val",
},
...