我正在尝试为我的Firestore数据库设置一些安全规则,并且正在为我的Android和iOS应用程序使用。我的数据库对所有用户都是开放的(在一定程度上)可供读取和写入,但是我不希望能够从应用程序外部的写入中删除/删除数据,因此我需要一些安全规则。我了解的是:allow read, write: if request.auth.uid != null
还不够,因为它很容易从应用程序外部伪造。
这是我想要实现的目标。当用户登录(甚至匿名登录)时,应用程序会将其唯一的uid发送到数据库中的集合。该集合存储所有用户的所有uid,其中文档名为uid。
现在,在安全规则中,我只允许对uid存储在此集合中的用户进行数据库读写。在尝试阅读它之后,我仍然不知道如何编写这样的安全规则。你能帮忙吗?如何在安全规则中引用此收集字段,以及如何使用请求者的uid搜索文档名称?
例如,我想要:
match /cities/{city} {
allow read, write: if request.auth.uid = userIdInDatabse()
}
我不知道如何编写函数userIdInDatabase()。这需要是用安全规则编写的函数,该函数接受request.auth.uid并检查请求的uid是否在我从应用程序生成的uid的集合中。如果请求的uid在数据库中,则该函数将返回true。如果请求的uid不在数据库中,它将返回false。我该如何编写这样的函数?
非常感谢!我希望它清楚。