对于我的生活,我无法理解为什么以下导致false允许写入.假设我的users集合是空的,我正在从我的Angular前端编写以下表单的文档:
{
displayName: 'FooBar',
email: 'foo.bar@example.com'
}
Run Code Online (Sandbox Code Playgroud)
我目前的安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
function isAdmin() {
return resource.data.role == 'ADMIN';
}
function isEditingRole() {
return request.resource.data.role != null;
}
function isEditingOwnRole() {
return isOwnDocument() && isEditingRole();
}
function isOwnDocument() {
return request.auth.uid == userId;
}
allow read: if isOwnDocument() || isAdmin();
allow write: if !isEditingOwnRole() && (isOwnDocument() || isAdmin());
}
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,我希望没有用户能够编辑自己的角色.普通用户可以编辑自己的文档,管理员可以编辑任何人.
Stubbing isEditingRole()for false给出了预期的结果,所以我把它缩小到那个表达式.
写入不断变回虚假,我无法确定原因.任何想法或修复都会有所帮助!
编辑1
我试过的事情:
function …Run Code Online (Sandbox Code Playgroud)