缺少或不足的权限 Firestore 数据库规则
Posted
技术标签:
【中文标题】缺少或不足的权限 Firestore 数据库规则【英文标题】:Missing or insufficient permissions firestore database rules 【发布时间】:2018-08-14 01:35:01 【问题描述】:我正在自学 Firestore,但我想不出一种只允许用户更新、删除或只读他们添加的集合的方法。
这是我正在使用的结构:
我使用 firebase auth 进行用户处理。我在每个集合的数据库中将currentUser.uid
保存为user_id
。
这些是我正在使用的规则
service cloud.firestore
match /databases/database/documents
match /tasks
allow read, update, delete: if request.auth.uid == resource.data.user_id;
allow create: if request.auth.uid != null;
当我尝试读取/获取数据时,我收到 Missing or insufficient permissions
错误。
我将 web api (javascript) 用于 firestore。这是我用来读取数据的代码。
function read()
db.collection("tasks").get().then((querySnapshot) =>
querySnapshot.forEach((doc) =>
var newLI = document.createElement('li');
newLI.appendChild(document.createTextNode(doc.data().task));
dataList.appendChild(newLI);
);
);
【问题讨论】:
【参考方案1】:错误出现在我的 JavaScript 中,我在没有用户过滤的情况下得到了所有内容
function read()
let taskColletion = db.collection("tasks");
taskColletion.where("user_id", "==", firebase.auth().currentUser.uid).get().then((querySnapshot) =>
querySnapshot.forEach((doc) =>
var newLI = document.createElement('li');
newLI.appendChild(document.createTextNode(doc.data().task));
dataList.appendChild(newLI);
);
);
【讨论】:
我也发现了。必须将安全规则过滤器添加到 where 子句。即使在您没有 where 子句的情况下(例如查询具有特定父文档 id 的分层子集合,所有子文档都知道与 where 子句匹配) 详细说明您的答案正确的根本原因Rules are not Filters > 您不能为集合中的所有文档编写查询并期望 Cloud Firestore 仅返回当前客户端拥有的文档访问权限。【参考方案2】:这个其实在Firestore Documentation上都有解释(推荐阅读)。
/tasks
后面缺少通配符:
service cloud.firestore
match /databases/database/documents
match /tasks/task
allow read, update, delete: if request.auth.uid == resource.data.user_id;
allow create: if request.auth.uid != null;
【讨论】:
我已经尝试过了,但它仍然给我Missing or insufficient permissions
以上是关于缺少或不足的权限 Firestore 数据库规则的主要内容,如果未能解决你的问题,请参考以下文章
使用访问规则中的字段写入 Firestore 时缺少权限或权限不足
Firebase Cloud Functions 无法写入 Firestore 数据库 - 权限缺失或不足
Firebase 身份验证正在运行,但 Firestore 以缺少权限或权限不足为由拒绝请求
Firestore 安全规则:“PERMISSION_DENIED:权限缺失或不足。”
Firebase Cloud Functions Firestore 触发器产生:错误:7 PERMISSION_DENIED:缺少权限或权限不足