Как защитить данные чата в Firestore? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь защитить свою базу данных и хочу защитить сообщения. Моя структура это messages / {chatid} / chat / messageArray (chatid похож на userid1-userid2). Поэтому я хотел бы проверить в правилах безопасности, содержит ли chatid идентификатор пользователя. Я попробовал кое-что, это работает в симуляторе, но у меня есть проблема, потому что в моем коде я запрашиваю группу сбора и пожарный магазин, запрещающий доступ. Я делаю что-то вроде db.collection ("messages"). Where ("users", "array-contains", user.uid) .onSnapshot ..... Если кто-то знает, как я могу защитить данные, я могу быть великолепен.

match /messages/{chatId}/{document=**} {
  allow read, write: if chatId.matches('.*'+request.auth.uid+'.*');
}

1 Ответ

0 голосов
/ 05 июля 2019

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

Вы можете либо установить rules_version = '2'; в первой строке своих правил, либо добавить другое правило, соответствующее документам всообщения без использования подстановочного знака:

match /messages/{chatId} {
  allow read, write: if chatId.matches('.*'+request.auth.uid+'.*');
}

Вместо этого я рекомендую вам не пытаться сопоставить содержимое chatId, а вместо этого использовать поля документов.Ваш запрос также должен использовать эти поля для фильтрации запросов.Это более просто.

...