错误[firebase.firestore]防火墙错误:缺少权限或权限不足。
我有一个对象,少数用户被允许更新。一个管理员将设置他们的电子邮件,这些用户谁登录与那些电子邮件将被允许更新。
以下是我尝试过的规则:
allow update: if request.resource.data.managerEmails.val().contains(request.auth.email) && request.resource.data.id == resource.data.id;
allow update: if request.resource.data.managerEmails.contains(request.auth.email) && request.resource.data.id == resource.data.id;
allow update: if request.resource.data.managerEmails.includes(request.auth.email) && request.resource.data.id == resource.data.id;
要更新的资源:
{
id: "someid",
...fields,
managerEmails: "abcde@email.com,anothermanager@email.com",
}
正在更新的用户身份验证:
{
uid: "rSTLnYD9aisyZJHQPC6sg7mlsZh1",
email: "abcde@email.com",
...
}
更新:使用request.auth.uid
在其他规则中一直起作用,但在这种情况下,我必须使用电子邮件,因为用户可能还没有注册。
使用规则Playground,我得到Property email is undefined on object.
也许使用request.auth.email
是不可能的?
3条答案
按热度按时间balp4ylt1#
我也遇到了同样的问题,但从使用www.example.com切换firebase.auth.email到了firebase.auth.token.email,现在它可以工作了。
kfgdxczn2#
我强烈建议做两件事。
首先,存储UID而不是电子邮件地址。UID是识别单个Firebase Auth帐户的首选方式,它始终保证存在且唯一。电子邮件地址则不是。
其次,将用户列表存储为数组类型的字段,而不是逗号分隔的字符串,这样总体上更容易管理。
完成这两件事后,规则就变得简单了:
s8vozzvw3#
使用:请求.验证.令牌.电子邮件insted request.auth.email
文档