【问题标题】:Firebase Security Rule to give multiple users access is not working授予多个用户访问权限的 Firebase 安全规则不起作用
【发布时间】:2021-07-06 04:15:27
【问题描述】:

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

我的结构如下所示:
Structure

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

//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());
  }

【问题讨论】:

  • 您的查询是什么?你认证了吗?您展示的结构似乎混合了集合和文档字段,您能更清楚哪个是集合吗?
  • 感谢您的回答,我更新了我的问题。现在应该很清楚了。
  • 查看我的答案的新更新..希望工作:)

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


【解决方案1】:

试试下面的例子:

可以读取或写入项目集合的经过身份验证的用户:

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 如下图

【讨论】:

  • 当然这是可行的,但这不是我需要的。
  • @ThiemoImgraben 对不起..但是你需要安全规则来让用户访问项目文档..请解释为什么要更新我的答案..谢谢
  • 嗨,Kevin,感谢您的意见,但成员集合在项目文档中。
  • @ThiemoImgraben .. 有用吗? ..还是有问题?
  • 嗨,Kevin,感谢您的意见,但成员集合在项目文档中。我认为问题是我需要更改Flutter调用,因为它需要与规则相同
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 2014-06-01
  • 2020-08-15
  • 1970-01-01
  • 2015-05-24
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多