0

尝试使用 angularfire2 运行 Angular Firestore。在我的 firebase 规则配置中,我有一个 OR 语句,我可以读取所有文档,published == true但我无法将isAdmin()标志设为 true 并读取所有文档。我的 Firestore 服务器规则看起来像

service cloud.firestore {
  match /databases/{database}/documents {

    function isAdmin() {
      return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    }

    match /myDocs/{myDoc} {
      allow read: if resource.data.published == true || isAdmin();
    }
  }
}

我也测试/users/$(request.auth.uid)了路径,但没有成功。标志的公共客户端查询published==true看起来像

const myDocsCollection = this.db.collection('myDocs', ref => ref.where('published', '==', true));
const myDocs = myDocsCollection.snapshotChanges();

而且效果很好。但我无法让基于身份验证的请求工作,因为它不依赖于resource规则中的。对于这种情况,文档非常薄弱。

我尝试使用 a .where('auth', '==', firebase.auth().currentUser.uid),但这不起作用,而且没有多大意义。还只测试了isAdmin()没有任何其他内容且没有where子句的语句。它总是返回不足的权限。我是否必须手动传递身份验证数据,或者firebase是否默认包含身份验证数据?

Firestore 用户数据库

这是 users 数据库的片段,key 肯定等于 users uid。在管理服务中,我请求数据

get(): Observable<MyDoc[]> {
  console.log(firebase.auth().currentUser); // returns user with correct uid
  const myDocsCollection = this.db.collection('myDocs');
  return myDocs = myDocsCollection.snapshotChanges().pipe(/* do some mapping, apply docid */);
}
4

0 回答 0