基于引用数据类型的 Firebase Firestore 安全规则

标签 firebase google-cloud-firestore firebase-security

在 Firestore 中,我有一个拥有所有者的项目集合。

所有者可以是用户,应该允许他阅读他的文档。

使用 userId 你可以这样做:

allow read, write: if resource.data.userId == request.auth.uid;

但是对于 owner 引用字段,似乎没有涉及安全规则的文档。

我尝试了这个安全规则:

allow read, write: if resource.data.owner == 'users/$(request.auth.uid)';

并像这样查询:

const owner = this.db.collection('/users').doc(auth.uid).ref;

const collection = this.db.collection('/items',
  (ref) => ref.where('owner', '==', owner)
);

但我仍然遇到权限缺失或不足的情况。

最佳答案

引用文献被视为 paths在安全规则中,因此您可以将其与

function checkUser() {
  return request.resource.data.userReference == /databases/$(database)/documents/users/$(request.auth.uid);
}

使用前面带有 databases/$(database)/documents 的完整路径非常重要。在这种情况下,我有一个名为 users 的集合,每个用户 id 都是他们的 uid (看起来您也在这样做)

关于基于引用数据类型的 Firebase Firestore 安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49206087/

相关文章:

javascript - 如何在Firestore中不断地将对象添加到嵌套集合中

javascript - 访问引号内的函数

android - 无法解析 : com. firebase :fire-client-android:2. 4.2

android - Firebase-Android,长时间闲置后无法保存数据

android - 使用 Google 登录时出错。 12501 空

firebase - 在 firebase firestore 中使用外部 orderby 而不使用使用过的查询不等式

firebase - Firestore 索引定价

firebase - 您如何在水平扩展的应用程序上管理 websockets?

firebase - 安全规则: checking for null auth

android - 任何人都可以获取我的数据库引用并在 firebase 数据库中对其进行编辑吗