Cloud Firestore 安全规则 - 只允许写入文档中的特定密钥

2023-12-29

我目前正在使用 Firestore 数据库为我的应用程序编写一些规则。 目前,每个人都可以读取数据,经过身份验证的用户可以写入。

  match /quizzes/{quizId} {
    allow read; 
    allow write: if request.auth != null;
  }

这工作正常,但我也希望未经身份验证的用户仅写入文档中的特定键。

文档内容示例:

{
  title: 'title',
  plays: 12,
  playedBy: [//Filled with user id's],
  ...
}

有没有什么方法可以限制未经身份验证的用户只能对 PlayBy 数组进行写访问,而不能对该文档的其他键进行写访问?


当然可以。但如果你有很多字段,它可能会变得有点复杂。

让我们从最简单的例子开始。像这样的东西允许未经身份验证的用户编写playedBy只要这是文档中唯一的字段:

if request.auth != null || request.resource.data.keys().hasOnly(['playedBy'])

如果未经身份验证的用户正在创建新文档或更新现有文档,则此方法有效。但一旦文档包含更多字段,它就会停止,因为request.resource.data包含写入成功后文档将具有的所有字段。

所以更好的选择是检查是否只有playedBy被修改,并且所有其他字段具有与之前相同的值。棘手的一点是处理不存在的字段,我通常使用一些辅助函数来处理:

function isUnmodified(key) {
  return request.resource.data[key] == resource.data[key]
}
function isNotExisting(key) {
  return !(key in request.resource.data) && (!exists(resource) || !(key in resource.data));
}

进而:

if request.auth != null &&
  request.resource.data.keys().hasOnly(['title', 'plays', 'playedBy']) &&
  isUnmodified('title') && 
  isUnmodified('plays')

确切的规则可能有点偏差,但我希望这足以让您自己完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cloud Firestore 安全规则 - 只允许写入文档中的特定密钥 的相关文章

  • Firestore 的离线数据保存限制是多少?

    Firebase 数据库根据其文档提供了 10 MB 的离线数据库缓存限制 但没有提及离线数据限制火库数据库 Firestore 的离线数据保存限制是多少 根据 Firebase 支持团队的回答 目前 缓存数据的大小没有限制火库然而 这种缺
  • 将查询快照中的文档返回为 json 字符串 firestore

    我在节点到 firestore 中进行了查询以获取文档集合 我想将集合编写为 json 字符串以供应用程序解析 我的代码如下 serverRef db collection servers getDocs serverRef where o
  • Firebase 在多个域中托管多个目录

    我有以下设置 想知道如何最好地配置 Firebase 托管 我有一个包含 build 目录的存储库 其中包含三个子目录 build a build b build c 我想在 prod 和 dev 中为每个目录提供其自己的域 或域 例如 a
  • Firebase blaze 计划是否有 Spark 计划配额?

    Firebase Blaze 计划是否有 Spark 计划免费配额 我想将 Firebase 与 google 云平台一起使用 但仍希望有免费托管限制 我不关心其他服务 因为我不使用它们 更新 2018 03 13 Blaze 计划中的项目
  • Angular Firebase 使用电话号码登录

    我是这个网站的新手 所以如果我犯了错误 请纠正我 我会修复它 并原谅我 我也是 Angular 4 环境的新手 Firebase 有一个新选项 signInWithPhoneNumber 我想在我的新应用程序上实现它 该方法需要参数 sig
  • Firebase 数据库 onWrite 的 Cloud Functions 触发两次

    您好 我正在开发一个通知系统 但我在删除已处理的通知数据时遇到问题 这onWrite事件侦听器被触发两次 从而产生两个通知 您能帮我找到解决方法 以便 onWrite 事件侦听器不应该被触发两次吗 删除已处理的数据很重要 exports s
  • FirebaseAuth.getInstance().signOut() 不注销

    我尝试从 firebase 注销用户 但在关闭应用程序并再次打开后 用户仍然处于连接状态 我尝试从 firebase 定期注销用户 但没有解决问题 我想知道是什么导致了这个问题 logout setOnClickListener new V
  • 无法解析以下类的超类型

    I have android app in kotlin这给了我这个错误 错误 无法解析以下类的超类型 请确保类路径中具有所需的依赖项 com google firebase auth FirebaseAuth 类 未解析的超类型 com
  • 类型错误:未定义不是对象(正在评估..)

    在 render 之前的控制台中 this state data1 length 没有给出任何错误 但是一旦我在视图标签中使用它 就会给出错误 类型错误 未定义不是对象 评估 this state data1 length 如果我从视图标签
  • iOS 是否有像 Android 一样的应用内更新功能?

    我为 Android 和 iOS 开发了一个移动应用程序 现在每周我们都会发布 2 个更新 大多数时候 Android 和 iOS 用户会停止应用程序的自动更新 但是 如果有重要更新或错误修复或新功能 那么我们必须要求用户更新应用程序以获得
  • Firebase 托管:部署时缓存清除脚本

    我有一个托管在 firebase 上的聚合物 单页应用程序 应用程序 当我将新版本部署到 firebase 时 我希望 firebase 重新加载 javascript 源而不是使用缓存的源 是否可以通过 firebase json 做到这
  • Xcode 12 根本没有调用动态链接 Firebase 函数?

    因此 我有一个正在运行的动态链接 当我单击它时它会打开应用程序 但不会发生动态链接的处理 这是因为下面看到的应用程序功能从未输入过 我不知道为什么 func handleIncomingDynamicLink dynamicLink Dyn
  • 我应该使用什么事件在 Firebase Analytics 上发送“按钮按下”事件

    我发现最合适的是选择内容 https firebase google com docs reference android com google firebase analytics FirebaseAnalytics Event html
  • 如何知道哪个用户正在尝试登录?

    用户是使用电子邮件和密码创建的 这就是我进行注册的方式 mSignup setOnClickListener new View OnClickListener Override public void onClick View v mEma
  • Firebase Function 从其他文件导入函数 - javascript

    我正在使用 javascript 构建 firebase 函数 现在我有很多内部调用函数 我计划将这些函数移动到不同的文件中 以避免 index js 变得非常混乱 下面是当前的文件结构 functions index js interna
  • 在 firebase 函数 onFinalize 中获取用于 firebase 存储的 uid

    我使用 firebase JS sdk 将音频文件上传到 firebase storage 发生这种情况时 我需要根据进行上传的经过身份验证的用户来处理它 我将其上传到其他地方进行处理 这意味着我需要在通过存储规则验证 uid 后才能访问该
  • Firebase 远程配置 - 初始获取返回本地默认值

    我正在使用 Firebase 远程配置来获取远程数据 并且我的应用程序需要首次启动时的最新数据 我正在我的应用程序中进行获取和更新onCreate mFirebaseRemoteConfig fetch cacheExpiration ad
  • Cloud Functions for Firebase - 通过 Nodejs/Cloud Function 将多个 PDF 合并为一个

    我遇到了一个问题 我试图通过云功能合并一堆 PDF 然后将合并的 PDF 下载到用户的计算机上 我的提供程序中有一个函数 它调用云函数并传递指向 pdf 的 URL 数组 如下所示 mergePDFs pdfs Create array o
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb

随机推荐

  • 处理命令行参数时清理控制流 [C#]

    我正在处理一个基于命令行参数执行大量 if else 分支的程序 这是 C 语言 但我确信它也适用于 Java C 等 以下是总体概述 if args Length 0 do something if args Length gt 0 ar
  • 无法远程访问9200端口

    刚刚开始使用elasticsearch 5 4 0 首先我将其安装在Mac 本地 上 然后安装在服务器上 在 Mac 中 当我在浏览器中运行 http 本地主机 9200 http localhost 9200 它向我显示输出 name N
  • Json解析Python子进程

    这是代码 inputDomain subprocess Popen cat etc localdomains shell True stdout subprocess PIPE domains inputDomain stdout read
  • 对话框打开时布局混乱

    我面临着一个非常奇怪的错误 其中一个布局的父级是 ConstraintLayout 当对话框打开时 后面的布局会自动开始收缩和移动 请参阅随附的 gif 来了解有关该错误的信息 请检查我的代码 看看我是否做错了什么 这是我的布局
  • 如何动态设置UIScrollView的内容大小

    我有关于UIScrollview 故事是我有一个UIView名为 ChartsView 我通过重写方法自己重新绘制它drawRect 绘图的内容是动态生成的 所以直到运行时我才知道它的大小 问题是如何 在哪里可以动态设置其超级视图 scro
  • PowerShell 中是否提供联合类型

    类型化数组就像 arrIntOnly Int 1 2 3 对于确保所有元素都是有效类型很有用 但是是否可以定义多种类型 例如 arrIntOrString Int String 1 two 3 PowerShell 可以not有联合数据类型
  • 根据同一列表中的下一个项目从列表中删除项目

    我刚刚开始学习 python 这里有一个蛋白质序列的排序列表 总共 59 000 个序列 其中一些是重叠的 我在这里列出了一个玩具清单 例如 ABCDE ABCDEFG ABCDEFGH ABCDEFGHIJKLMNO CEST DBTSF
  • 针对 Android、iPhone 等集成的 .NET Web 服务格式/协议的建议

    我正在为我的 ASP NET MVC 3 网站构建一个 Web 服务 理想情况下 我希望所有客户端 我的网页 iPhone 应用程序 Android 应用程序 Windows Phone 7 应用程序等 使用相同的服务层来加载和保存数据 我
  • Ajax 重新加载后 jQuery mCustomScrollbar 消失

    like here https stackoverflow com questions 13231199 jquery mcustomscrollbar not working on ajax content 24632046 246320
  • 如何在 Cython 中创建固定长度、可变的 Python 对象数组?

    我需要有一个 python 对象数组用于创建 trie 数据结构 我需要一个像元组一样长度固定 像列表一样可变的结构 我不想使用列表 因为我希望能够确保该列表是exactly正确的大小 如果它开始分配额外的元素 随着 trie 变大 内存开
  • 使用 cxf 处理 jax-rs webservice 中的身份验证和授权

    我有一个带有jsps的网络应用程序 我没有使用任何 struts 或 mvc 框架 我们使用 Apache CXF 构建 JAX RS 服务 现在我想做以下事情 允许用户使用用户名和密码登录 对于所有后续对 Web 服务的调用 应使用相同的
  • 取消 RX.Net Observer 正在进行的 OnNext 方法

    正如我原来的问题中所述 参见将相互依赖的事件流与 RX Net 关联起来 https stackoverflow com questions 26640548 correlate interdependent event streams w
  • Objective-C:self = nil 不会将实例设置为空值

    我有下一个代码 非常简单 SecondViewController m if contentRvController nil contentRvController ContentView alloc initWithNibName Con
  • 推送通知的 iOS 设备令牌示例

    我需要通过服务器身份验证方法 该方法需要 deviceToken 进行注册 但我只有模拟器 无法从中获取令牌 并且我想向服务器发送错误令牌 例如 000 000 000 但我不知道设备令牌中有多少位 任何人都可以帮我提供示例设备令牌吗 设备
  • 我应该如何在 App Engine 上进行全文搜索?

    我应该如何做才能在 App Engine 上进行快速全文搜索 同时尽可能少地进行工作 以及尽可能少的 Java 我正在使用 Python 我在最近的一个项目中使用了 Whoosh 和 appengine 它似乎工作得很好 看一下https
  • Java 中是否存在使用泛型(域模型,而不是持久层)的多对多集合?

    我似乎在谷歌中使用了错误的搜索词 我已经为多对多关联编写了一个通用类 但我猜这已经完成了 它很可能存在于比我自己的实现更好的实现中 这是我第一次尝试编写通用类 为了更好地了解我正在寻找的内容 我添加了一些我自己的片段 我用 2 个哈希图来支
  • 月底的 Airflow DAG 调度

    我想在 Airflow v1 9 0 上运行计划 我的DAG需要在每个月底运行 但我不知道如何编写设置 my dag DAG dag id DAG ID catchup False default args default args sch
  • Java 8泛型函数应该是不明确的,但在运行时失败

    我正在尝试将 Java 7 代码迁移到 Java 8 因此我的代码类似于 package tests import java util Arrays import java util Map public class Tests priva
  • $project mongodb 聚合中的 $regex

    我有一个users具有类型的位置字段的集合String 我想沿着文档传递一个分数字段 该字段显示文档的位置是否与文本 Austin 相似 例如记录的位置是德克萨斯州奥斯汀 我希望它与Austin 我以为可以使用 regex为了这 我写了这个
  • Cloud Firestore 安全规则 - 只允许写入文档中的特定密钥

    我目前正在使用 Firestore 数据库为我的应用程序编写一些规则 目前 每个人都可以读取数据 经过身份验证的用户可以写入 match quizzes quizId allow read allow write if request au