【问题标题】:firestore: how to check if a document existfirestore:如何检查文档是否存在
【发布时间】:2021-07-22 23:14:13
【问题描述】:

我的 Firestore 中有一个集合 admins,我在其中添加了具有管理员角色的用户的文档 ID。

在授予用户管理员角色的其他方面,我需要检查他们的用户 ID(documentID)是否在管理员集合下找到。

这是我的代码:

isAdmin() async {
await getUser.then((user) async {
  final adminRef = await _db.collection("admins").doc(user?.uid).get();
  if (adminRef.exists) {
    admin.value = true;
  } else {
    admin.value = false;
  }
  update();
}); }

它不断返回false,因为当前用户的文档存在于admins下。

当我用users 替换查询中的集合时,它工作正常。

我不知道我哪里出错了。请问有什么线索吗?

这里是admins collection image image of admins collection

这里是users collection image image of users collection

【问题讨论】:

  • 添加您的管理员收藏的屏幕截图...也只是一个建议,Firebase 自定义声明非常适合添加此类角色。
  • @Dharmaraj 虽然自定义声明是存储用户角色的有效选项,但将信息存储在数据库中同样有效。事实上,后者是我们在此处记录的一种方法:firebase.google.com/docs/firestore/solutions/role-based-access
  • @FrankvanPuffelen 谢谢。如果他不知道 Admin SDK 并等待数据库结构,我只是提到了它。
  • @Dharmaraj 我添加了admins collection的图像
  • @Clid3 只是为了确认,您可以登录adminRef 吗?看看它是否不为空

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


【解决方案1】:

这会奏效。如果没有文档,data() 方法将返回 null,当存在空白/空文档时,将返回 {}

isAdmin() async {
await getUser.then((user) async {
  final adminRef = await _db.collection("admins").doc(user).get();
  if (adminRef.data() == {}) {
    admin.value = true;
  } else {
    admin.value = false;
  }
  update();
}); }

我不明白您为什么要在集合中创建空文档。相反,您可以将 admin 的 userId 存储在每个文档中,并将 userId 分配为 documentId。您可以使用 where 查询来检查它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2020-10-05
    • 1970-01-01
    • 2019-01-09
    • 2021-12-29
    • 2021-11-09
    • 2019-04-19
    • 2019-09-24
    相关资源
    最近更新 更多