firebase - Firestore 规则无需身份验证即可写入/更新特定字段

标签 firebase google-cloud-firestore firebase-security

我想在不请求身份验证服务的情况下只授予我的 firestore 数据库集合中的一个字段的写入/更新访问权限。我的firestore规则是:

service cloud.firestore {
  match /databases/{database}/documents {
    match /businesses/{businessId} {
      allow read;
      allow write: if request.auth.uid != null;
    }
  }
}

我的数据库结构为 businesses是:
addedBy: string;
address: string;
category: string;
claim: boolean;
city: string;
email: string;
id: string;
likes: number;
location: {
    _lat: number,
    _long: number
};
name: string;
ocHours: [{
    day: string,
    from: string,
    status: string,
    to: string
}];
phone: number;
sponsored: boolean;
state: string;
status: string;
verificationCode: string;

我只想更新 claim没有 request.auth.uid != null 的字段.

有什么建议?

最佳答案

正如 Ron 所说,firestore 规则中的权限分配只能应用于整个文档。
然而,有一种允许写入/更新/删除/创建特定文件的方法,即确保传入的更改对象仅具有您要授予权限的字段。
你这样做:

  • 读取传入对象中的所有键:request.resource.data.keys()
  • 确保对象中唯一的键是 hasOnly(["claim"])

  • service cloud.firestore {
        match /databases/{database}/documents {
            match /businesses/{businessId} {
                allow read;
                allow write: if request.resource.data.keys().hasOnly(["claim"]); 
            }
        }
    }
    

    尽管问题发布了一段时间,但希望它有所帮助!!

    关于firebase - Firestore 规则无需身份验证即可写入/更新特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51881309/

    相关文章:

    javascript - 如何使用钩子(Hook)将 React 类组件转换为函数组件以获取 firebase 数据

    java - 数据未插入 Firebase 实时数据库抛出 Android

    ios - Firebase 动态链接中的 customURLScheme 是什么?

    ios - 获取 Firebase 文档对象作为 Swift 对象

    google-cloud-firestore - 是否有响应代码可将 Google Cloud 任务标记为永久失败,以便它不会重试?

    ios - 防止重新加载已报告的评论

    java - Firestore order by 和 limit 在 kotlin 中不起作用

    swift - Firebase UID 与文档 ID 和 Firestore 规则

    google-analytics - Firebase Analytics 键和值限制为 24 和 36 个字符

    angular - 尝试使用 request.path 设置 Cloud Firestore 安全规则