在Firestor规则中,如何允许将新文档创建到集合中,并允许将新值添加到文档中,但不允许重写文档中的值?
请参阅以下内容以更清楚地了解
:集合--------------文档--------------值
用户-------------------- DonutCoder -------------- isAdmin,birthDate
现在,如果我想向文档Donut Coder下的值添加电子邮件,该怎么做却要防止覆盖(例如,将isAdmin更改为true,以便用户获得更多特权)
我尝试过的操作:allow read, create
-但这允许创建新文档,但不能更改文档中的属性。
答案 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;