【问题标题】:Why do I get permission error when trying to read from a collectionGroup?尝试从 collectionGroup 中读取时,为什么会出现权限错误?
【发布时间】:2021-02-26 19:56:01
【问题描述】:

我正在构建一个用户可以发布帖子的应用。我有一些没有问题的东西,但后来我开始把东西放在子集合中,现在得到了一些权限错误。想知道是否有人可以帮助检查一下,如果您发现我在这里做错了什么,请告诉我。

我试图在这里简单地读取数据。

我注释掉了有效的代码(见下文)。现在,我想将posts 集合放在users 集合下的子集合中,这会导致权限问题。

这是我得到的控制台错误:

client.js?06a0:51 error fetching posts Error [FirebaseError]: Missing or insufficient permissions.

这是模型:

这是我获取数据的代码:

  async fetch() {
    try {
      // const postsArr = []
      // const postsCol = await this.$fire.firestore
      //   .collection('posts')
      //   .orderBy('createdAt', 'desc')
      //   .limit(5)
      //   .get()
      // postsCol.forEach((doc) => postsArr.push(doc.data()))
      // this.posts = postsArr
      const postsArr = []
      const postsQuery = await this.$fire.firestore
        .collectionGroup('posts')
        .where('published', '==', true)
        .orderBy('createdAt', 'desc')
        .limit(1)
        .get()
      postsQuery.forEach((doc) => postsArr.push(doc.data()))
      this.posts = postsArr
    } catch (error) {
      console.error('error fetching posts', error)
    }
  },

最后,这是我的安全规则:

rules_version = '2';
service cloud.firestore {
   match /databases/{database}/documents {
  match /{document=**} {
  // lock down all paths and open up as needed. IS THIS REALLY NEEDED? THOUGHT IT WAS COMPUTER SEC 101?
  allow read, write: if false;
  }
  
  // Required for collection group queries
  match /posts/{postId} {
    allow read;
  }
  
  match /usernames/{username} {
    allow read;
    allow create: if isValidUsername(username);
  }
  
  match /users/{uid} {
    allow read;
    allow write: if isUser(uid) && isSignedIn() && emailVerified();
  }
  

  match /users/{uid}/posts/{postId} {
    allow read;
    allow create;
    // allow create: if canCreatePost(uid); 
    // allow update: if canUpdatePost(userId) || canIncrementHearts(userId, postId);
    // allow delete: if request.auth.uid == userId;
  }

有人发现了什么吗?谢谢!

【问题讨论】:

  • 我想我明白了。需要在帖子路径中添加通配符:match /{path=**}/posts/{postId} { allow read; }

标签: javascript google-cloud-firestore nuxt.js firebase-security


【解决方案1】:

我想通了。需要在帖子路径中添加通配符:

match /{path=**}/posts/{postId} { allow read; }

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 2017-01-30
    • 2017-03-19
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多