Firestore 规则 - 按路径允许

Firestore rules - allow by path

我使用 Firebase 的 Firestore。我有一个名为“root”的集合,其中有一个名为“db”的项目。

我想允许所有人对该项目进行读写访问。

这是我的规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.path == 'root/db';
    }
  }
}

这条规则默认存在,除了这一行 request.path == 'root/db'; 这是我的习惯。我试图设置一个时间戳规则并且它有效。但是这个按路径行不通。

这是我对浏览器的请求:

  const ref = doc(dbApi, "root", "db");
  console.log(ref.path);
  let db: Database;
  try {
    db = (await getDoc(ref)).data() as Database;
  } catch (err) {
    console.log(err);
    throw err;
  }

ref.path 日志 root/dberr 日志 FirebaseError: Missing or insufficient permissions.

(在应用程序中使用“firebase”:“9.6.4”javascript 包)

我也试过一些变体 https://firebase.google.com/docs/reference/security/storage#path

与其使用 catch all (/{document=**}) 然后过滤,不如在 match 语句处过滤:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /root/db {                <-- change it here
      allow read, write: if true;
    }
  }
}

虽然这可行,但您应该进一步限制规则以限制此文档的形状。如果您的数据库全部基于单个文档,请考虑使用 RTDB,因为它可以对数据库中的数据提供更精细的控制。