我正在使用 Firestore。它需要安全规则。
以下是我针对集合组运行的实际查询:
const db = getFirestore(app);
const MainCollection = collectionGroup(db, "list");
const searchQuery = query(
MainCollection,
where("destination", "==", itinerary.destination),
);
收集路径为
/maincollection/{userId}/list/{documents=**}
。
CoPilot 建议的 Firebase 规则:
match /maincollection/{userId} {
allow read: if request.auth != null;
match /list/{document=**} {
allow read: if request.auth != null;
}
}
match /maincollection/{doc}/list/{itin} {
allow read: if request.auth != null;
}
match /maincollection/{doc}/list/{document=**} {
allow read: if request.auth != null;
}
match /maincollection/{document=**} {
allow read, write: if request.auth != null;
}
所有这些都给我以下错误:
搜索行程时出错:FirebaseError:缺少或权限不足。
由于您的查询是针对名为“列表”的集合组的集合组查询,因此您需要按照集合组查询和安全规则文档中的说明进行操作:
因此,您需要一个更像这样的匹配(假设您希望所有经过身份验证的用户执行查询):
注意:如果您实际上不需要查询所有同名集合的集合组查询,那么
collectionGroup
根本不要使用它来定义查询。如果您要查询单个子集合,则只需向查询构建器函数提供该子集合的完整路径,这样匹配的原始规则/maincollection/{doc}/list/{itin}
可能会按预期工作。