使用Firestore将安全规则中的电子邮件与文档中的电子邮件进行匹配

时间:2019-03-04 22:54:29

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

我面临两个问题:

  • 您不能更改句号“。”当您使用“ request.auth.token.email”之类的东西时,“ firebase规则”中的字符(操作字符串和连接的选项非常有限,不支持替换功能)
  • 由于使用哈希映射,因此您不能在查询中使用电子邮件,因为它与'key'的句点字符相同。

由于上述问题,放弃使用HashMap方法,我正在尝试探索Arrays。是否可以通过request.auth.token.email获取登录用户的电子邮件并将其与文档中数组的'email'元素进行比较?

例如-我以'bb@gmail.com'作为登录用户,我想获取'sharedWith'数组包含'bb@gmail.com'作为条目的所有文档,而忽略其余的文件。我可以在代码中实现它,但我也想将这种安排设置为“安全规则”,以使阅读文档更加健壮。

---------编辑----------- 我尝试了拆分并加入了我的安全规则,如下所示:

  allow read: if isSignedIn() && resource.data.sharedWith[(request.auth.token.email).split('.').join(',')] in ["true"];

我的查询如下:

db.collection("Sites")
        .whereEqualTo("sharedWith.bb@gmail,com","true")

我的文档具有以下内容:

sharedWith
     mm@gmail,com : "true"
     bb@gmail,com : "true"

用户以“ bb@gmail.com”身份登录

以上设置无效。我收到权限被拒绝的错误。

0 个答案:

没有答案