首页 > 解决方案 > 每个文档颤动的 Firebase-firestore 安全规则

问题描述

Firebase-Firestore 拒绝所有请求,而不是拒绝不符合数据 Firebase-Firestore 安全规则的特定文档

allow read: if authenticated() && resource.data.status == true || author(resource.data.creatorid) || admin();

我想要实现的只是状态=真实的文件会出现

错误

Unhandled Exception: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.

使用包 paginate_firestore 颤动

PaginateFirestore(
  itemsPerPage: 5,
  key: key,
  shrinkWrap: true,
  physics: ClampingScrollPhysics(),
  itemBuilderType: PaginateBuilderType.listView,
  itemBuilder: (index, context, documentSnapshot) {
    final data = documentSnapshot.data() as Map?;
    return MainComponent(
      data: data,
    );
  },
  query:
      FirebaseFirestore.instance.collection('members').orderBy('title'),
  isLive: false,
);

从 Firestore 中检索到的零文档。屏幕只是显示加载

标签: firebasefluttergoogle-cloud-firestorefirebase-security

解决方案


我认为状态未设置为 true 的文档会引发错误。尝试在查询中添加 where 子句,以获取状态为 true 的文档。

query:
      FirebaseFirestore.instance.collection('members').where("status", isEqualTo: true).orderBy('title')

在向作者展示他们自己的请求时,您可以添加一个 where 检查作者 ID 是否等于当前登录用户的 ID。

query:
      FirebaseFirestore.instance.collection('members').where("authorId", isEqualTo: "currentUserId").orderBy('title')

还可以尝试用逻辑或括号括起来条件:

allow read: if authenticated() && (resource.data.status == true || author(resource.data.creatorid) || admin());

推荐阅读