我的Web应用通过查询获取一些文档,其中有两个约束:
const readReviews = async (gsin: string) => {
const res = [];
const ref = collectionGroup( db, 'reviews' );
const constraints = [
where('gsin', '==', gsin),
orderBy( 'timestamp', 'asc' ),
];
const q = query( ref, ...constraints );
const querySnapshot = await getDocs(q);
querySnapshot.forEach( (doc) => {
res.push( doc.data() );
} );
return res;
}
我的Firestore法则是
match /products/{gsin} {
allow read;
//..,
match /reviews/{reviewId} {
allow read;
//...
}
}
当我从网络应用程序获取数据时。它只显示“permission-denied”错误。
我试着制定另一个规则来关注评论子集合:拒绝许可
match /reviews/{reviewId} {
allow read;
}
当我允许读取给每个人时,它会使获取恰到好处
match /{document=**} {
allow read;
}
因此,我认为这是一个以规则为中心的问题。
1条答案
按热度按时间gcuhipw91#
如文档中关于安全查询收款组中单据的步骤2所示,您需要一个如下格式的顶层规则:
这是必要的,因为集合组匹配具有给定名称的集合,而不管它们存在于数据库中的什么位置。
所以添加一个顶级规则,如下所示: