【问题标题】:Firebase: Allow Read or Write access to different collectionsFirebase:允许对不同集合进行读取或写入访问
【发布时间】:2020-12-26 13:27:16
【问题描述】:

我的项目有 2 个主要收藏:“联系人”和“相册”。

这是我的data structure

我正在尝试为“相册”集合中的每个人分配完全读取权限,并将写入权限限制为未经身份验证的用户。 同时,我想将写入权限分配给未经身份验证的用户,并将读取、更新、删除权限分配给“联系人”集合中经过身份验证的用户。

当前规则集在规则模拟器中对于已验证的请求和未验证的请求均失败。规则如下:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /contact/{document=**} {
      allow create;
      allow read, update, delete: if request.auth != null;
    }
   }
    match /albums/{document=**}{
      allow read;
      allow write: if request.auth != null;
    }
}

Firebase 查询返回“onSnapshot 中未捕获的错误:FirebaseError:缺少或权限不足。”

以下查询:

useEffect(() => {
const unmount = firestore
  .collection("albums")
  .orderBy("date", "asc")
  .onSnapshot((snapshot) => {
    const tempAlbums = [];
    snapshot.forEach((doc) => {
      tempAlbums.push({ ...doc.data(), id: doc.id });
    });
    setAlbums(tempAlbums);
  });
return unmount;
}, []);

关于如何更正规则的任何想法?

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    您的规则中有错字。应该是这样的:

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /contact/{document=**} {
          allow create;
          allow read, update, delete: if request.auth != null;
        }    //The /albums path must be included inside /documents
        match /albums/{document=**}{
          allow read;
          allow write: if request.auth != null;
        }
      }
    }
    

    【讨论】:

    • 感谢您的回答!查询现在可以工作,但规则集在规则模拟器中失败,可能它们有问题,这就是为什么我总是收到 Firestore 数据库未正确保护的警报的原因。
    • @AlexandruLupu 规则在模拟器中失败,因为您没有为 /albums/contact 以外的任何内容设置任何规则,所以如果您在您的应用程序,您可以忽略那些警报
    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多