【发布时间】:2019-03-11 03:58:59
【问题描述】:
我有以下 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;
}
}
}
我想在users 集合中将AccountId 字段强制为int,但我仍然可以写入(和批量写入)AccountId 是string。
我正在尝试验证 users 集合中每个文档中的数据。
下面是更新user文档的代码:
try {
await db.collection('users').doc('1').set({
AccountId: '1234'
})
} catch(e) {
console.log(e)
}
这是不允许的,因为 AccountId 不是 int。
try {
await db.collection('users').doc('1').set({
AccountId: 1234
})
} catch(e) {
console.log(e)
}
这应该是允许的,因为AccountId 是一个整数。
使用 Admin SDK,我可以将 AccountId 设置为 string。
编辑:
我已经更新了我的规则,我仍然可以将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;
}
}
}
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security