Firebase:允许对不同集合的读取或写入访问

时间:2020-09-08 07:35:25

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

我的项目有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;
}, []);

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

1 个答案:

答案 0 :(得分: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;
    }
  }
}