首页 > 解决方案 > 授予多个用户访问权限的 Firebase 安全规则不起作用

问题描述

我正在尝试实施 Firebase 安全规则,让用户可以访问“项目”文档。我有一个项目集合,每个项目都有一个带有 UserID 的成员集合。用户已通过身份验证。

我的结构看起来像这样:
结构

这是我的安全规则,但它不起作用。
谁能帮我 ?我究竟做错了什么 ?

//Firebase 规则

    rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
   match /projects/{projectID} {
            allow read, get, write: if request.auth.uid != null && exists(/databases/$(database)/documents/projects/{project}/members/$(request.auth.uid));
        }
  }
}



    

//颤振调用

Stream<List<ProjectModel>> getUserList() {
    print("getUSer");
    return FirebaseFirestore.instance.collection('projects').snapshots().map(
        (snapShot) => snapShot.docs
            .map((document) => ProjectModel(
                name: document.data()['name'],
                owner: document.data()['owner'],
                description: document.data()['description']))
            .toList());
  }

标签: firebasefluttergoogle-cloud-firestorefirebase-security

解决方案


试试下面的例子:

可以读取或写入 Projects Collection 的经过身份验证的用户:

rules_version = '2';
   service cloud.firestore {
     match /databases/{database}/documents {
       match /projects/{projectID} {
         allow read, write: if request.auth != null && exists(/databases/$(database)/documents/projects/{projectID}/members/$(request.auth.uid));
    }
  }
}

注意:在您的成员集合中,其中的文档必须是 Auth .uid,如下图所示 项目集合

Auth.Uid


推荐阅读