我知道已经存在answer to this question on StackOverflow,但我想我的用例有些不同。
我在Firestore上有两个集合:“用户”和“模板”
每次创建用户时,都会创建一个模板,并将模板ID分配给相同的用户ID,如下所示。
** Repository.js **
async createUser(email, password) {
const template = await getLocalTemplate()
const credentials = await auth.createUserWithEmailAndPassword(email, password)
await db.collection('users').doc(credentials.user.uid).set({ email })
await db.collection('templates').doc(credentials.user.uid).set({
...template,
})
return credentials
}
但是,我不知道如何允许用户只写其模板。
这些是我的Firestore规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{user} {
allow create
allow read, write: if request.auth.uid == user
}
match /templates/{template} {
allow read, create
allow write: if request.auth.uid == /users/{user}
}
}
}
答案 0 :(得分:1)
执行以下操作。通过使用sizeof
通配符,它可以在您的规则中使用{template}
变量。
template
您可以对rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{user} {
allow read: ...;
allow write: if request.auth != null && request.auth.uid == user;
}
match /templates/{template} {
allow read: ...;
allow write: if request.auth != null && request.auth.uid == template;
}
}
}
和read
使用相同的规则,如下所示:
write