Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore规则-当规则在没有OR语句的情况下通过时,为什么在规则中添加OR语句返回false?_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Firebase Firestore规则-当规则在没有OR语句的情况下通过时,为什么在规则中添加OR语句返回false?

Firebase Firestore规则-当规则在没有OR语句的情况下通过时,为什么在规则中添加OR语句返回false?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有一个firestore规则,在我添加OR语句之前一直通过。不管正确的一面是对的还是错的,这难道不应该仍然通过吗 allow read: if exists(/databases/$(database)/documents/companies/$(company)/users/$(request.auth.uid)) || hasRole(['Super', 'Manager', 'Tester']); 如果我省略了| | hasRole(['Super'、'Manager'、'Teste

我有一个firestore规则,在我添加OR语句之前一直通过。不管正确的一面是对的还是错的,这难道不应该仍然通过吗

allow read: if exists(/databases/$(database)/documents/companies/$(company)/users/$(request.auth.uid)) 
|| hasRole(['Super', 'Manager', 'Tester']);
如果我省略了| | hasRole(['Super'、'Manager'、'Tester');该规则通过/允许数据访问

这是与函数有关还是我在firestore规则中缺少了或语句

function hasRole(roles) {
    return get(/databases/$(database)/documents/companies/Seva%20Development/users/$(request.auth.uid)).data.roles.hasAny(roles);
}

companys/company/users/userId有许多字段,其中一个字段是roles。角色是字符串数组(例如:[“Admin”、“Manager”、“Tester”])

我认为这是因为您在
hasprole
中没有正确使用变量,
data
应该在
get
之后调用<代码>角色应为:

function hasRole(roles) {
  return get(/databases/$(database)/documents/companies/$(company)/users/$(userId)).data.roles.hasAny(roles);
}

请编辑您的问题,以显示您希望它检查的文档中
data.roles
的数据类型和内容。我曾试图省去路径变量以简化,但我已更新函数使其保持原样,并在调用get后对其进行编辑以获得数据,但它仍然拒绝许可。你提出的是什么类型的请求<代码>获取或
列表
?如果
list
,那么我认为您的规则不起作用,因为Firestore强制执行的规则不会针对结果集中的每个文档执行。(也就是说,由于您在每个文档下嵌套了
用户
),您的请求将无法工作。)这是一个get请求。我在此应用程序中不使用列表请求。甚至双重检查模拟器是否只检查get请求。