如果我理解正确[1],在Firebase中无法限制用户访问他们拥有的数据,也无法隐藏敏感列。在新发布的Firestore中这样更好吗?它有解决方法吗?
我能想到的另一种选择是通过云功能路由此类请求,以便根据需要进行过滤,而不是允许直接访问。可能有用吗?
答案 0 :(得分:7)
Firestore(和Firebase)并没有真正区分谁“拥有”数据。您可以制定规则来实施所有权政策,但没有任何内在因素可以强制实现这一点。
在Firestore中,规则适用于整个文档,因此您无法隐藏敏感列。典型的解决方案是在一个文档中包含公共字段,在一秒内包含私有字段。然后,您可以write rules to enforce different access to the separate documents。
在编写这样的多个文档时,您有几个选项。一种方法是将整个记录写入私有一半并具有一个功能过滤器并写入公共部分。这样做的缺点是,在您编写私有部分和何时可以看到更新的公共部分之间存在延迟。
另一种方法是使用写批量以原子方式写入两个文档。与要求您联机的完全成熟事务不同,写入批处理可以在脱机时使用,并且适用于需要对两个或更多文档进行原子更改但您不希望任何其他写入进行争用的情况。用户更新自己的配置文件将是写批量工作得很好的一个很好的例子。