У меня есть следующие правила 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;
}
}
}