我正在开发一个应用程序,它使用 Firestore 作为数据库。我有一组管理员,其中文档的 id 是管理员的电子邮件地址。我想创建一个安全规则,它只允许管理员创建新文档。我目前的解决方案如下所示:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{collectionName}/{document=**} {
allow create: if exists(/databases/$(database)/documents/admins/$(request.auth.email));
}
}
}
但是当我尝试运行管理应用程序时,它给出了权限缺失或不足的错误。此外,当我尝试在规则操场中对其进行测试时,出现以下错误:
Error running simulation — Error: simulator.rules line [6], column [24]. Function not found error: Name: [exists].; Error: Invalid argument provided to call. Function: [exists], Argument: ["||invalid_argument||"]
据我所知,不知何故缺少exists函数并且文档ID无效,但为什么呢?它只是一个字符串,不是吗?
答案 0 :(得分:2)
如果您尝试获取与身份验证请求相关联的电子邮件,您必须这样做:
$(request.auth.token.email)
。
您可以查看有关 Request.auth
对象 here 的结构的详细信息。
答案 1 :(得分:0)
没有选项可以让用户成为管理员并在实时数据库中授予特殊权限,我认为 FireStore 也是如此。
但是您可以做的是在用户中添加一个字段,例如 userType,并在管理员注册时为其赋予值 Admin,随后您可以根据该字段创建规则。