Почему это правило безопасности Firestore не применяется? - PullRequest
1 голос
/ 11 марта 2019

У меня есть следующие правила Firestore. Я использую Admin SDK с ключом учетной записи службы для доступа к Firestore.

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user} {
      allow read, delete: if true;
      allow update, write: if getAfter(/databases/$(database)/documents/users/$(request.resource.id)).data.AccountId is int;
    }
  }
}

Я хочу применить поле AccountId как int в коллекции users, но я все еще могу записывать (и групповые записи), где AccountId - это string.

Я пытаюсь проверить данные в каждом документе в коллекции users.

Вот код, который обновит документ user:

try {
  await db.collection('users').doc('1').set({
    AccountId: '1234'
  })

} catch(e) {
  console.log(e)
}

Это не должно быть разрешено, поскольку AccountId не является целым числом.

try {
  await db.collection('users').doc('1').set({
    AccountId: 1234
  })

} catch(e) {
  console.log(e)
}

Это должно быть разрешено, поскольку AccountId является целым числом.

Используя Admin SDK, я могу установить AccountId на string.

EDIT: Я обновил свои правила и все еще могу написать AccountId как string.

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user} {
        allow read: if true;
        allow create, update: if request.resource.data.AccountId is int;
    }
  }
}

1 Ответ

1 голос
/ 11 марта 2019

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

...