Правила безопасности Firestore для неизвестных ключей в карте - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь реализовать правило безопасности Firestore, которое проверяет все записи, сделанные при создании внутри карты. Однако у меня проблема в том, что я не знаю ключи от карты. У меня есть что-то вроде этого:

{
    "name": "Tom",
    "answers": {
        "SomeUUID": {
            "answer": "Alps",
            "right": true
        },
        "AnotherUUID": {
            "answer": "Mount Everest",
            "right": false
        }
    }
}

Чтобы проверить записи с правилами безопасности, я бы сделал что-то вроде этого

rules_version = "2"
service cloud.firestore {
  match /databases/{database}/documents { 

  match /answers/{answerID} {  
        allow read;
        allow create: request.resource.data.name is string && request.resource.data.answers is map
  } 

}

Как я могу дополнительно проверить содержимое карты участников, не зная, размер карты или ключи? Есть ли подстановочный знак, который я мог бы использовать для ключей? Значение для каждого созданного ключа должно быть одинаковым. Я хотел бы сделать что-то вроде этого:

    allow create: request.resource.data.name is string && request.resource.data.answers && 
request.resource.data.member.$(wildcard).keys().size() == 2 && request.resource.data.member.$(wildcard).answer is string && request.resource.data.member.$(wildcard).right is bool

Возможно ли это или мне нужно изменить весь лог c? Есть ли шанс, что подстановочный знак доступен?

1 Ответ

0 голосов
/ 24 марта 2020

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

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

...