Правило Firebase для проверки того, что пользователь находится в канале, не работает с .exists или .val - PullRequest
1 голос
/ 15 апреля 2020

Здравствуйте, я пытаюсь создать правило пожарной базы, чтобы проверить погоду или нет, пользователь находится в канале сообщений, которому он отправляет сообщение. Вот моя структура базы данных firebase

firebase channels

, и мое правило:

    "messages": {
      "$room_id": {
        ".read": "root.child('channels').child($room_id).child('joined').child(auth.uid).val() === true",
        ".validate": "root.child('channels').child($room_id).exists()",

, действует правило .validate, в то время как .read нет. Это работает, если я удаляю запись из присоединенного или нет, я также попытался заменить .val() === true на .exists(). Мне нужно, чтобы он работал только в том случае, если uid подключен и установлен в значение true.

Это код JS, который я использую

const itemsRef = firebase.database().ref('messages').child(this.selectedChannel);
itemsRef.on('value', snapshot => {
        let data = snapshot.val();
        this.messages = Object.entries((data || {})).map(m => {return {id: m[0], user: m[1].user, message: m[1].message}});
})

1 Ответ

0 голосов
/ 15 апреля 2020

В подобных случаях обычно используется подход для установки значений переменных - для приложений чатов обычно используются переменные user, timestamp доступа и room_id - так что вы можете проверить, если они не пустые и добавить сообщение altogheter. В вашем случае при проверке вы будете использовать третью переменную, отличную от timestamp.

Учитывая это, я считаю, что хорошей конфигурацией для вашей проверки будет следующее - этот код не проверен и вам нужно будет изменить его больше для своего использования, но я считаю, что это хорошая отправная точка, как базовая c модель для вас .

".read": "root.child('members/'+$room_id+'/'+auth.uid+joined).exists() && !data.exists() && newData.exists()",
// the object to write must have a name, message, and be in the room
".validate": "newData.hasChildren(['user', 'message', 'joined'])",

Как и в приведенном выше примере кода, проверка будет выполнена, как только у нее появятся все значения, которые вы хотите проверить. Примером этого кода в полной версии можно ознакомиться в официальной документации .

Еще один пример простого чата с Firebase, к которому я бы порекомендовал вам получить доступ, находится в следующем хранилище: katowulf / gist: 4741111

Дайте мне знать, если информация помогла вам!

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