Google cloud firestore 多权限Firestore安全规则

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

我的网站有多个具有不同权限的帐户

我在Firestore令牌中使用自定义声明来授予用户正确的访问权限

到目前为止,它与此设置配合得非常好:

对具有1个位置访问权限的用户1的声明如下:
{“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"]}
如果这样设置索赔有效,则
中的
操作符应该有效。我在这里说应该,因为最近有人在设置这样的声明时遇到了问题,我自己也没有测试过。

也发布在