Google cloud firestore 多权限Firestore安全规则
我的网站有多个具有不同权限的帐户 我在Firestore令牌中使用自定义声明来授予用户正确的访问权限 到目前为止,它与此设置配合得非常好: 对具有1个位置访问权限的用户1的声明如下:Google cloud firestore 多权限Firestore安全规则,google-cloud-firestore,firebase-security,Google Cloud Firestore,Firebase Security,我的网站有多个具有不同权限的帐户 我在Firestore令牌中使用自定义声明来授予用户正确的访问权限 到目前为止,它与此设置配合得非常好: 对具有1个位置访问权限的用户1的声明如下:{“companyLocation”:“testLocation1”} 不久,我将有用户谁可以访问一个或多个位置。例如,用户2可以访问“testLocation2”和“testLocation3”,而无需访问“testLocation1” 例如,用户2声明可以有一个分隔符(“·”),看起来像这样:{“companyL
{“companyLocation”:“testLocation1”}
不久,我将有用户谁可以访问一个或多个位置。例如,用户2可以访问“testLocation2”和“testLocation3”,而无需访问“testLocation1”
例如,用户2声明可以有一个分隔符(“·”),看起来像这样:{“companyLocation”:“testLocation2·testLocation3”}
我如何使用安全规则实现这一点?我试过:
function checkMultipleLocations(){
return request.auth.token.companyLocation.contains('testLocation2');
}
这给了我一个错误,说明:
无效的函数名:包含
在文档中,它声明您可以在:v In x中使用(检查值v是否在列表x中),但这不适用于列表(不返回true),仅适用于对象/贴图(通过将用户声明字符串拆分为数组进行尝试,没有运气)
有什么想法吗?中的操作符只在列表上工作。此声明的值{“companyLocation”:“testLocation2·testLocation3”}
不是列表,而是字符串。因此
中的操作符在这里不起作用
有关支持的运算符的列表,请参阅的文档。这没有提到包含
方法,但是确实有一个匹配
方法,它允许您完成这个用例
request.auth.token.companyLocation.matches('.*testLocation2.*')
您还可以尝试将声明存储为数组:
{"companyLocation": ["testLocation2", "testLocation3"]}
如果这样设置索赔有效,则
中的操作符应该有效。我在这里说应该,因为最近有人在设置这样的声明时遇到了问题,我自己也没有测试过。也发布在