我正在使用Firebase创建一个轮询应用程序,并且我需要写下一个安全规则,该规则允许用户仅一次写入文档。我曾考虑过创建一个已写入文档的用户的用户ID列表,然后创建一个规则来检查是否有新的请求来自已经投票的用户。但是,麻烦的是,我将不得不从客户端创建这样一个不安全的用户列表。谁能告诉我如何解决此问题?
答案 0 :(得分:1)
只需通过一条规则强制执行,即当用户写文档时,他还必须将自己添加到列表中。简单的例子:
match /docs/{docid} {
allow update: if userNotInList() && userAddedToList()
&& ... // Add more conditions as needed
function userNotInList() {
return !exists(/databases/$(database)/documents/docs/$(docid)/userlist/$(request.auth.uid));
}
function userAddedToList() {
return existsAfter(/databases/$(database)/documents/docs/$(docid)/userlist/$(request.auth.uid));
}
match /userlist/{userid} {
allow create: if userid == request.auth.uid
&& request.resource.data.time == request.time // For instance
&& ... // Add more conditions as needed
}
而且您必须成批写两个文档