Firebase数据库安全规则,请检查resource.data

时间:2020-06-28 03:08:00

标签: firebase google-cloud-firestore firebase-security

错误[firebase.firestore] FirebaseError:缺少权限或权限不足。

我有一个允许几个用户更新的对象。管理员将设置他们的电子邮件,并且使用这些电子邮件登录的这些用户将被允许更新。

这些是我尝试过的规则:

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可以在其他规则中使用,但是在这种情况下,我必须使用电子邮件,因为用户可能尚未注册。

在规则操场上,我得到Property email is undefined on object.也许无法使用request.auth.email

2 个答案:

答案 0 :(得分:0)

我强烈建议您做两件事。

首先,存储UID而不是电子邮件地址。 UID是识别单个Firebase Auth帐户的首选方法,并且始终保证存在并且唯一。电子邮件地址不是。

第二,将用户列表存储为数组类型字段而不是逗号分隔的字符串。总体而言,这将更容易管理。

完成这两件事后,规则变得简单了:

p_j

答案 1 :(得分:0)

我遇到了同样的问题,但是从使用firebase.auth.email切换到firebase.auth.token.email,现在可以使用了。