Правила записи в базу данных Firebase в реальном времени - PullRequest
0 голосов
/ 24 мая 2019

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

Кто-то создает учетную запись, и эта учетная запись создает путь в базе данных реального времени:

Структура проста (ключ, идентификатор пользователя,другие данные).

enter image description here

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

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {

    "waitingForApproval": {
      "$uid": {
        ".write": true,
        ".read": "auth != null && $uid === auth.uid"
      }
    },
  }
}

Но теперь возникает вопрос.Как я могу позволить пользователям писать в этот объект?Каждый, у кого есть код (см. BQUyhq) w3D), может писать в id объекта.Они не могут писать, когда у них нет кода.

Возможно ли что-то подобное?Если так, как я могу это сделать.

1 Ответ

0 голосов
/ 24 мая 2019

Я могу придумать два способа приблизиться к чему-то вроде этого:

1.Использование облачной функции:

Установите правило записи false и используйте облачную функцию для обновления.Облачная функция будет принимать код в качестве входных данных, проверять, соответствует ли он ожидаемому коду, и выполнять обновления от имени пользователя.Например:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

exports.updateObject = functions.https.onCall((data, context) => {
  const uid = data.uid;
  const code = data.code;

  const codeRef = admin.database().ref(`waitingForApproval/${uid}/code`);
  return codeRef.once('value').then((codeSnapshot) => {
    if (codeSnapshot.val() === code) {
      // Make updates on the user's behalf
    }
  });
});

2.Сохранение введенного пользователем кода в БД:

Добавьте редактируемый пользователем раздел, в котором пользователи могут устанавливать свои коды и проверять их, например:

БД после ввода пользователем кода:

"userCodes": {
  "bXUQ6PRNqvOgjwoAlm6HmYuWiYo1": {
    "BQUyhq)w3D": true,
  },
  ...
}

Установите ваше правило, чтобы проверить, установил ли пользователь код для объекта:

"waitingForApproval": {
  "$uid": {
    ".write": "root.child('userCodes').child($uid).child(data.child('code').val()).val() == true"
    ".read": "auth != null && $uid === auth.uid"
  }
},

Что по существу проверяет, установлено ли userCodes/{uid}/{code} на true, прежде чем разрешитьthe write.

(Обратите внимание, что при использовании этого метода ваши коды не могут содержать символы, которые firebase не поддерживает в своих ключах:. $ # [] /)

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