【发布时间】:2021-06-30 16:09:21
【问题描述】:
我知道没有正确答案,但我想听听您对具体示例的看法: 假设您有餐厅,而这家餐厅的点餐系统包含 3 个应用程序:
-
对于餐厅“老板”(因为缺少更好的词)。
-
给快递员。
-
为客户(订餐)。
-
更像是一个管理员帐户。因此,我决定使用带有 admin sdk 的云功能来添加新用户,即送货员帐户。菜单和菜肴的构建都在这里进行。我目前只为此使用客户端 sdk,仅仅是因为它对于如此简单的任务来说速度很快,而且缓存是一个很大的优势。现在,在安全方面,我的想法是“老板”不想篡改自己的文件,因此允许他通过安全规则对这里的所有文件进行读写访问似乎没问题。不过,想听听您的想法。
-
现在,这个有点难,因为我在这里只使用客户端 sdk,并允许对送货员的订单文档进行读写访问。这可能有点幼稚,因为允许对送货员的写访问打开了篡改订单文档上特定字段的可能性。我决定这样做只是为了速度和缓存,但现在我想我应该改变它。 “老板”和送货员之间还有聊天功能。我每次对话使用一个文档,如果它超过 1mb,我有一个云功能,如果接近这个限制,它会归档旧消息。但是由于对聊天文档的所有读写都可以通过客户端 sdk 由交付人员进行,这也使得它在安全方面有点开放(即使有更复杂的安全规则)。如果我停止使用一个文档并且每条消息都有一个文档,我也许可以解决这个问题。有了一些好的安全规则,我可以让它更安全一些,但与使用云功能相比。
-
在这里,我根本没有在前端编写任何代码,我正在考虑在提交订单请求时使用云功能来确保安全。
我真的很喜欢仅使用客户端时的速度(对于简单查询)和缓存。如果我有一些计算量更大或更复杂的东西,我会使用云功能,效果很好。我也喜欢在客户端 sdk 完成某些操作后使用云功能来触发东西。使用云函数作为简单查询的一种包装器或中间人,我最大的担忧是冷启动的速度(有时与仅使用客户端 sdk 相比,它在启动后有点慢)。我不喜欢丢失客户端 sdk 中的缓存和流。但是,由于安全性非常重要,我对该怎么做有点扭曲。 我不是要任何代码或完美的答案,只是你的想法以及你是否有过这方面的经验。我倾向于坚持使用客户端 sdk,即使对于交付人员也是如此,并尝试通过更好、更复杂的安全规则来缓和这一点。然后,也许尝试自己利用它,看看它有多好。你有什么想法?
我读过这篇我觉得很有用的文章:https://medium.com/firebase-developers/should-i-query-my-firebase-database-directly-or-us 并观看了 firebase 关于云功能的视频系列,我发现文档非常有用(云功能和 Firestore)。
【问题讨论】:
标签: firebase google-cloud-firestore google-cloud-functions