Firestore规则:防止覆盖属性

时间:2020-05-13 13:27:37

标签: firebase google-cloud-firestore firebase-security

在Firestor规则中,如何允许将新文档创建到集合中,并允许将新值添加到文档中,但不允许重写文档中的值?

请参阅以下内容以更清楚地了解

集合--------------文档--------------值

用户-------------------- DonutCoder -------------- isAdmin,birthDate

现在,如果我想向文档Donut Coder下的值添加电子邮件,该怎么做却要防止覆盖(例如,将isAdmin更改为true,以便用户获得更多特权)

我尝试过的操作:allow read, create-但这允许创建新文档,但不能更改文档中的属性。

2 个答案:

答案 0 :(得分:1)

1)不要添加任何覆盖相同路径的代码。

2)为防止其他人进行逆向工程并进行更新,请添加以下内容:

allow update: if false

同样,任何人仍然可以尝试再次创建同一文档,因此您需要向其添加更多安全规则。为此请检查official documentation

我对类似问题有答案,但它们指的是实时数据库。虽然您可以检查它here

allow update: if false仅阻止更新现有值。

答案 1 :(得分:0)

防止isAdmin或birthDate被更新:

allow update: if request.resource.data.isAdmin = resource.data.isAdmin
  && request.resource.data.birthDate = resource.data.birthDate;

您可以根据需要开始以此为基础。例如,如果您只允许只允许登录用户登录,并且一次只能修改一个字段:

allow update: if request.auth.uid != null
  && request.resource.data.diff(resource.data).affectedKeys().size() == 1 
  && request.resource.data.isAdmin = resource.data.isAdmin
  && request.resource.data.birthDate = resource.data.birthDate;