Firebase Cloud Firestore子集合规则权限-拒绝

kuuvgm7e  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(108)

我的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;
}

因此,我认为这是一个以规则为中心的问题。

gcuhipw9

gcuhipw91#

如文档中关于安全查询收款组中单据的步骤2所示,您需要一个如下格式的顶层规则:

match /{path=**}/[COLLECTION_ID]/{doc}

这是必要的,因为集合组匹配具有给定名称的集合,而不管它们存在于数据库中的什么位置。
所以添加一个顶级规则,如下所示:

match /(path=**)/reviews/{reviewId} {
    allow read;
}

相关问题