【发布时间】:2018-09-15 10:44:15
【问题描述】:
假设我们有一个名为 todos 的 Firestore 集合,其中每个待办事项看起来像这样:
{
name: "Buy milk",
completed: false,
user: "eYtGDHdfgSERewfqwEFfweE" // some user's uid
}
现在,我想在更新期间防止修改 user 字段(换句话说 - 将此字段设为只读)。
相信我,我已经完成了我的研究。我的update 规则如下所示:
allow update: if request.auth.uid == resource.data.user
//&& !request.writeFields.hasAny(["user"]);
//&& !(request.writeFields.hasAny(["user"]));
//&& !request.resource.data.keys().hasAny(["user"]);
//&& !('user' in request.resource.data);
//&& ('user' in request.resource.data) == false;
//&& !('user' in request.writeFields);
没有上述(注释掉)工作。它们都导致错误:Error: Missing or insufficient permissions.。
但是……
它变得更加有趣!因为如果我们比较上述一些规则以获得积极的结果(又名true),它们就会起作用!
例如,这个完美运行(假设我们在请求中包含user 字段):
allow update: if request.resource.data.keys().hasAny(["user"]) == true;
但是这个不起作用(假设我们没有在请求中包含user 字段):
allow update: if request.resource.data.keys().hasAny(["user"]) == false;
谁能解释一下这里发生了什么?这可能实际上是 Firestore 中的一个错误吗?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security