我有以下安全规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function no_write(field) {
return (!(field in request.resource.data) && !(field in resource.data))
|| (field in request.resource.data && field in resource.data && resource.data[field] == request.resource.data[field]);
}
function create_by_owner(field) {
return (!(field in request.resource.data) && !(field in resource.data)) || ((field in request.resource.data) && !(field in resource.data))
|| (field in request.resource.data && field in resource.data && resource.data[field] == request.resource.data[field]);
}
match /ll_profile/{user_id} {
allow read: if true;
allow write: if request.auth != null && user_id == request.auth.uid
&& no_write("last_changed") && create_by_owner("native_language");
}
}
}
no_write
函数限制要修改的字段。 并且create_by_owner只允许创建一个字段,如果该字段已经存在,则不能进行任何修改。 但是当我运行这个单元测试时:
it("succeed to write to my own document authenticated displayed_name field", async () => {
const db = get_firestore(my_auth);
const testDoc = db.collection(collection).doc(my_id);
await firebase.assertSucceeds(testDoc.set({displayed_name: "123"}, {merge: true}));
})
它给我一个空值错误的错误。 对于'create'@l30
,我不限制字段displayed_name
的写访问。 我的规则的哪一部分限制了这个写访问?
由于create
上不存在resource
,
如果需要在规则中使用resource.data
,则必须将write
拆分到create
和update
中
null 谢了!
获取错误: OnSnapshot中未捕获的错误:FirebaseError:权限缺失或不足。 下面是正在调用的函数: Firebase安全规则如下: 奇怪的是,它仍然正确地显示一切,只是触发了这个错误。为什么会这样?我忽略了吗?
null 基本上数据结构如下所示: 问题是,我应该写什么安全规则来允许用户只在他们所属的组中(拥有组密钥)读取、创建和更新数据?同时,如何禁止用户找出其他群组的密钥?
我需要一些帮助来制定我的消防安全规则。 以下是我的firestore规则:
最近我收到了一系列Firebase通知,涉及: [Firebase]您的Cloud FiRecovery数据库有不安全的规则 我们检测到您的安全规则存在以下问题:任何用户都可以写入您的整个数据库。因为您的项目没有强大的安全规则,任何人都可以访问您的整个数据库。攻击者可以窃取、修改或删除您的数据,并会抬高您的账单` Edit2:我需要的是允许每个人都写,而不需要登录,但是只有管理员帐户应该能够从Fi
意向行为 目标是修改我的安全规则,以便只有经过身份验证的用户才能读写该特定用户的数据。这是基于users UID,这是我们如何识别单个用户的(这是通过firebase身份验证完成的,所以不确定问题是什么)。 我的数据库结构 FirebaseError:权限缺失或不足 任何关于我在这里能做什么的建议都将不胜感激。我在其他问题中找不到任何适用的东西。 我的查询 *我的错误
我有两个收藏-租赁和用户。 租赁单据有一个名为“LandlorDid”的字段,类型为引用(而不是字符串)。 现在,在我的Firestore安全规则中,我希望只有当租用的landlordID字段与发出请求的用户的uid(即匹配时,才允许更新租用。 这应该很简单,但get()根本不起作用。Firebase文档,滚动到“Access other Documents”(访问其他文档)对我的情况没有任何帮助
问题是我不能使用具有这些规则的查询,因为(我发现)无法根据子集合是否包含某个文档进行查询。这意味着我不能列出某个用户所属的所有组。我尝试在作为一部分的映射中列出所有用户,但我无法设置谁可以编辑文档的某些部分的权限,因此这也不起作用。 编辑:据我所知,查询必须以某种方式与规则匹配,否则权限将被拒绝。如何创建一个查询来收集某个用户所在的所有组并满足此规则。