Правила безопасности Firestore, используя uid из базы данных - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь настроить некоторые правила безопасности для своей базы данных Firestore, которую я использую для своего приложения Android и iOS. Моя база данных открыта для чтения и записи всеми пользователями (в определенной степени), но я не хочу, чтобы данные могли быть удалены / взломаны из записей вне приложения, поэтому мне нужны некоторые правила безопасности. Я понимаю, что: allow read, write: if request.auth.uid != null недостаточно, поскольку его легко подделать извне приложения.

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

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

Например, я бы хотел:

match /cities/{city} {
      allow read, write: if request.auth.uid = userIdInDatabse()
    }

I не знаю, как написать функцию userIdInDatabase (). Это должна быть функция, написанная в правилах безопасности, которая берет request.auth.uid и проверяет, находится ли этот uid запроса в коллекции uid, которые я сделал из приложения. Если идентификатор запроса находится в базе данных, функция вернет true. Если uid запроса нет в базе данных, он вернет false. Как мне написать такую ​​функцию?

Большое спасибо! Я надеюсь, что это ясно.

...