任何客户端代码(在我们的示例中为Angular应用)都会在某个时候对集合中的文档进行假设:它将假定某些属性在某些状态等中存在。
换句话说,我们有一个隐式数据模式。
什么是在打字稿中明确表示模式并强制数据库操作符合模式的好方法?
重要:我们实现了文档架构版本,将其作为任何文档的属性。因此,具有旧模式和新模式的文档并存。例如。版本号为1的国家/地区不应具有“大写”字段,而版本号为2的国家/地区必须具有该字段。
因此,要求架构模型必须支持此类情况。
答案 0 :(得分:0)
可以在Firebase的server-side security rules中实施有关可以存储哪些数据的规则。这些规则通常用于访问控制(谁可以访问数据?)和数据验证(可以存储哪些数据?)
例如,此规则仅允许文档具有lastIndex
和lastUpdated
字段的情况下进行写入:
allow write: request.resource.data.keys().hasAll(['lastIndex', 'lastUpdated'])
您还可以验证这些字段的类型,甚至是它们的值。例如,以下规则确保lastIndex
是一个数字,而lastUpdated
必须始终设置为与服务器相同的时间:
allow write: request.resource.data.keys().hasAll(['lastIndex', 'lastUpdated']) &&
request.resource.data.lastIndex is int &&
request.resource.data.lastUpdated == request.time
Firecasts series on youtube中有一些关于这些安全规则的精彩视频。 data types and global objects in Firebase security rules上的这段视频看起来特别相关。