Firestore 安全规则 - 写入集合的权限有问题
Firestore security rules - trouble with permission to write to a collection
我试图设置一个安全规则,其中将文档写入特定集合的人只有在他们的 uid 与文档中包含的 uid 匹配时才能这样做,但无法使其工作。在这种情况下,我正在将文档写入一个名为 'embedUsers' 的集合,并且正在写入的文档包含一个在创建用户帐户时获取的 uid 字段。
规则设置如下:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /embedUsers/{documents=**} {
allow read: if true;
allow write: if resource.data.uid == request.auth.uid;
}
}
}
该文档由 Angular 客户使用以下代码编写:
const userRef: AngularFirestoreDocument<UserModel> = this.afs.doc(`embedUsers/${user.accountAddress}`);
console.log("current logged in user", this.fireUser.uid);
try {
console.log(user.uid);
await userRef.set(user, { merge: true });
} catch (e) {
console.error(`FireAuthService.updateUserData unexpected failure with error ${e.message}`)
throw new Error("updateUserData failed");
}
console.log("wrote embed user successfully")
虽然我已经检查过登录用户的 uid 是否与正在写入的数据对象中的 uid 字段相匹配,但对 userRef.set
的调用失败并显示 FireAuthService.updateUserData unexpected failure with error Missing or insufficient permissions.
看来一定是出了什么问题使用我的规则,但我不确定是什么(如果我将规则更改为简单地说 allow write: if true;
文档将按预期编写。
如 doc 中所述,“写入数据时...... request.resource
变量包含文档的未来状态”。所以你应该调整你的规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /embedUsers/{documents=**} {
allow read: if true;
allow write: if request.resource.data.uid == request.auth.uid;
}
}
}
我试图设置一个安全规则,其中将文档写入特定集合的人只有在他们的 uid 与文档中包含的 uid 匹配时才能这样做,但无法使其工作。在这种情况下,我正在将文档写入一个名为 'embedUsers' 的集合,并且正在写入的文档包含一个在创建用户帐户时获取的 uid 字段。
规则设置如下:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /embedUsers/{documents=**} {
allow read: if true;
allow write: if resource.data.uid == request.auth.uid;
}
}
}
该文档由 Angular 客户使用以下代码编写:
const userRef: AngularFirestoreDocument<UserModel> = this.afs.doc(`embedUsers/${user.accountAddress}`);
console.log("current logged in user", this.fireUser.uid);
try {
console.log(user.uid);
await userRef.set(user, { merge: true });
} catch (e) {
console.error(`FireAuthService.updateUserData unexpected failure with error ${e.message}`)
throw new Error("updateUserData failed");
}
console.log("wrote embed user successfully")
虽然我已经检查过登录用户的 uid 是否与正在写入的数据对象中的 uid 字段相匹配,但对 userRef.set
的调用失败并显示 FireAuthService.updateUserData unexpected failure with error Missing or insufficient permissions.
看来一定是出了什么问题使用我的规则,但我不确定是什么(如果我将规则更改为简单地说 allow write: if true;
文档将按预期编写。
如 doc 中所述,“写入数据时...... request.resource
变量包含文档的未来状态”。所以你应该调整你的规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /embedUsers/{documents=**} {
allow read: if true;
allow write: if request.resource.data.uid == request.auth.uid;
}
}
}