向特定域内的用户提供Restric firesotre CRUD

时间:2018-09-03 20:13:14

标签: google-cloud-firestore

我正在尝试在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')

1 个答案:

答案 0 :(得分:2)

request.auth.token.email将是一个String,而according to the reference docs则String没有名为“ contains”的方法。它确实有一个称为matches的用于使用正则表达式的方法,您可以看到文档中有一些方便的示例代码:

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

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

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