Firestore规则无法正常运行?! (documentId&get())

时间:2019-04-06 04:47:39

标签: firebase google-cloud-firestore firebase-security-rules

因此,我整天都在砸墙,试图回踩和调试我的Firestore规则。我已经将其剥离回到问题所在,希望可以使它更容易解释。

一切正常如果,如果按照我的规则这样做:

service cloud.firestore {
  match /databases/{database}/documents {

    match /user_partnerships/{partnershipId} {
        allow read: if 0 == 0;
    }
  }
}

它按预期返回2个文档,其ID为 cLMZw4EqkSLnafGt8wz7 ky4hxaEqI8BeLFoip2DF

通过使用以上代码并返回数据,我知道查询本身不是问题,因为该规则允许查询所有数据。

继续讨论这个问题。.如果我现在将以上内容更改为以下内容,它将停止工作并说我没有权限:

service cloud.firestore {
  match /databases/{database}/documents {

    match /user_partnerships/{partnershipId} {
        allow read: if exists(/databases/$(database)/documents/user_partnerships/$(partnershipId));
    }
  }
}

这肯定是没有意义的,因为该规则正在处理的当前文档就是它所查询的内容,并且显然存在。.

因此,规则中的 {partnershipId} 参数似乎没有传递给get()函数,并且似乎根本无法访问

我检查了是否可以通过在get()函数中键入我知道的id来模拟一个工作规则,并且可以正常工作:

service cloud.firestore {
  match /databases/{database}/documents {

    match /user_partnerships/{partnershipId} {
        allow read: if exists(/databases/$(database)/documents/user_partnerships/ky4hxaEqI8BeLFoip2DF) || exists(/databases/$(database)/documents/user_partnerships/cLMZw4EqkSLnafGt8wz7);
    }
  }
}

这有效!这样就表明传递 partnershipId 变量无效吗?

现在这不是我打算使用的规则,我打算使用 partnershipId 查询某些内容以收集角色权限,但是由于 partnershipId 并没有,甚至似乎都无法访问,我什至无法开始。

请帮助?我似乎根本无法访问 match / user_partnerships / {partnershipId} 变量。

编辑:另一个没有任何意义的例子:

这有效

service cloud.firestore {
  match /databases/{database}/documents {

    match /user_partnerships/{partnershipId} {
        allow read: if resource.data.permissionOwner == request.auth.uid;
    }
  }
}

但这不是吗?

service cloud.firestore {
  match /databases/{database}/documents {

    match /user_partnerships/{partnershipId} {
        allow read: if get(/databases/$(database)/documents/user_partnerships/$(partnershipId)).data.permissionOwner == request.auth.uid;
    }
  }
}

0 个答案:

没有答案