每个文档颤动的 Firebase-firestore 安全规则

Posted

技术标签:

【中文标题】每个文档颤动的 Firebase-firestore 安全规则【英文标题】:Firebase-firestore security rules per document flutter 【发布时间】:2021-10-25 21:55:37 【问题描述】:

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

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

我想要实现的只是 status = true 文档会出现

错误

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 中检索到零个文档。屏幕只是显示加载

【问题讨论】:

【参考方案1】:

我认为状态未设置为 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());

【讨论】:

你能看看这个***.com/questions/68945869/…

以上是关于每个文档颤动的 Firebase-firestore 安全规则的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中显示来自firestore的特定文档详细信息

我想将对象列表添加到 Firestore 文档,-颤动

使用 StreamBuilder 获取 Firestore 文档,其中包含颤动中的地图列表

颤动中的BottomNavigationBarItem背景颜色

使用底部导航栏颤动保存 PageView 内每个页面的状态

颤动中的Firebase分页