我在当地的聚会上讨论了Firebase的基础知识(http://szimek.github.io/presentation-firebase-intro),并从观众那里得到了两个有趣的问题。
想象一下,你有一个类似Twitter的应用程序,有数十亿条推文,每个人都有读取权限。
有没有办法限制用户可以获取的数据大小(在服务器端)?即使我有tweetsRef.limit(10)
电话,用户也可以轻松将其更改为tweetsRef.limit(10e9)
并尝试获取所有推文。
如何防止用户更新现有记录(即使它是由该用户创建的),但允许他们删除现有记录(仅当该记录是由该用户创建的)?
答案 0 :(得分:1)
如果您担心限制操作,您可以在服务器而不是客户端(如您所建议的那样)获取推文,这样用户就无法操纵限制。
对于第二个问题,这取决于您希望如何处理删除。通常,您实际上并不希望删除该对象,因此您可以在deleted
属性上为创建用户提供写访问权限。或者,如果您希望他们实际删除该对象,请检查该用户是否为创建者,并且newData
的值为null
。
以下是来自@ Kato评论的示例安全规则(允许写入/删除,禁止更新):
".write": "!data.exits() || !newData.exists()"