我有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
。
规则仍会进行数据库查询吗?
答案 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
,则无需在第二个条件下获取文档。