Firestore安全规则会提早返回吗?

时间:2020-06-02 16:21:35

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

我有2个条件来检查对用户的许可。第一个条件不需要任何数据库查询,但第二个条件则需要。 例如

allow read, write: if (docId == request.auth.uid);
allow read: if get(/databases/$(database)/documents/groups/$(docId)).data[request.auth.uid].membership == true

如果docId属于该用户,则我的数据库的结构必须具有读写访问权限。否则,用户可能正在访问他所属的组中的某些内容。在这种情况下,我将进行数据库查询,并检查用户是否真的是成员。

假设用户正在访问仅属于他的文档,在这种情况下,不需要数据库查询,并且第一个条件应返回true

规则仍会进行数据库查询吗?

1 个答案:

答案 0 :(得分:0)

通常,如果您有两个条件:

allow read: if X;
allow read: if Y;

这与X和Y在定义顺序上的逻辑或相同:

allow read: if X || Y;

当X评估true时,安全规则语言将短路,而跳过Y的评估。

因此,如果您的第一个条件(docId == request.auth.uid)评估为true,则无需在第二个条件下获取文档。