Firebase数据库安全规则,在auth.email中查看resource.data

inkz8wg9  于 2022-11-30  发布在  其他
关注(0)|答案(3)|浏览(128)

错误[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是不可能的?

balp4ylt

balp4ylt1#

我也遇到了同样的问题,但从使用www.example.com切换firebase.auth.email到了firebase.auth.token.email,现在它可以工作了。

kfgdxczn

kfgdxczn2#

我强烈建议做两件事。
首先,存储UID而不是电子邮件地址。UID是识别单个Firebase Auth帐户的首选方式,它始终保证存在且唯一。电子邮件地址则不是。
其次,将用户列表存储为数组类型的字段,而不是逗号分隔的字符串,这样总体上更容易管理。
完成这两件事后,规则就变得简单了:

allow update: if resource.data.managerUids.hasAny([request.auth.uid]);
s8vozzvw

s8vozzvw3#

使用:请求.验证.令牌.电子邮件insted request.auth.email
文档

相关问题