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