我无法使用Firestore安全规则来限制创建的文档中的字段数。 https://firebase.google.com/docs/firestore/security/rules-structure
我的用户文档中有7个字段。我想将任何文档CREATE尝试限制为我期望的字段数。我将数字设置为100,这显然不是我故意发送失败所发送的数字。我希望100失败,但不会失败。
match /users/{uid} {
// Applies to writes to nonexistent documents
allow create: if request.resource.data.size() == 100;
}
我还尝试了以下操作,将size属性直接放置在资源对象上,但没有成功。
允许创建:如果request.resource.size()== 100;
这是尝试执行CREATE操作的代码;
const DEFAULT_systemRole = 'User';
const DEFAULT_disabled = false;
// creates up a static sentinel value to be set on the Firestore server
var serverTimestamp = admin.firestore.FieldValue.serverTimestamp()
admin.firestore().collection('users').doc(req.body.uid).set({
// sent from client
usernameSlug: req.body.usernameSlug,
username: req.body.username,
email: req.body.email,
// set only here on server
systemRole: DEFAULT_systemRole,
disabled: DEFAULT_disabled,
dateModified: serverTimestamp,
dateCreated: serverTimestamp,
}).then(function() {
console.log("Successfully created FireStore user");
}).catch(function(error) {
console.log("Error creating user:", error);
throw(error)
})
答案 0 :(得分:0)
我刚刚在模拟器中对此进行了快速测试,并且它似乎对我有用:
因此,以上安全规则需要2个字段。
当我仅在一个字段中写一个新文档时(在屏幕截图中),写操作将失败。
当我将规则更改为仅需要一个字段时,相同的写入成功。
答案 1 :(得分:0)
从设计上看,我偶然使用的Firebase Admin sdk似乎不支持Firebase安全规则。相反,Firebase Admin SDK会跳过所有安全规则。因此,看来我将所有调用移至Firebase Admin sdk,并使用以下规则简单地锁定了Firestore数据库,以防止发生客户端被黑客入侵的可能性。
match /users/{uid} {
allow read, write: if false;
}
以下帖子也发现了相同的内容; How to get Firestore rules working with service accounts