首页 > 解决方案 > 将 Firestore CRUD 限制为特定域中的用户

问题描述

我正在尝试在 Firestore 中创建一个规则,将使用限制为属于特定域的用户的所有 CRUD 操作,我的问题是规则上下文中似乎不存在 contains 子句。

这是我的规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if isUserAndSignedIn();
    }
  }

  function isUserAndSignedIn(){
    return request.auth != null && request.auth.token.email.contains('domain.com')
  }
}

我得到的错误是:错误:simulator.rules 行 [9],列 [36]。未找到函数错误:名称:[包含]。

我也尝试过 indexOf 之类的

request.auth.token.email.indexOf('domain.com')!=-1 request.auth.token.email.endsWith('domain.com')

标签: google-cloud-firestore

解决方案


request.auth.token.email将是一个字符串,根据参考文档,字符串没有一个名为“包含”的方法。它确实有一个matches使用正则表达式的方法,您可以看到文档有一些方便的示例代码:

'user@domain.com'.matches('.*@domain[.]com') == true

您应该能够适应您的情况:

return request.auth != null && request.auth.token.email.matches('.*@domain[.]com')

推荐阅读