代码之家  ›  专栏  ›  技术社区  ›  Ranjan

Firestore安全规则是否提前返回?

  •  1
  • Ranjan  · 技术社区  · 4 年前

    我有两个检查用户权限的条件。第一个条件不需要任何数据库查询,但第二个条件需要。 例如

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

    我的数据库的结构是这样的,如果 docId 属于该用户。否则,用户可能正在从他所属的组访问某些内容。在这种情况下,我将进行一个数据库查询,并检查用户是否真的是一个成员。

    假设一个用户正在访问一个只属于他的文档,在这种情况下,不需要DB查询,第一个条件应该返回 true .

    规则是否仍将进行数据库查询?

    1 回复  |  直到 4 年前
        1
  •  0
  •   Doug Stevenson    4 年前

    一般来说,如果你有两个条件:

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

    这与X和Y之间的逻辑“或”的定义顺序相同:

    allow read: if X || Y;
    

    当X求值时,安全规则语言将短路 true ,并跳过对Y的求值。

    所以,如果你的第一个条件 (docId == request.auth.uid) 评估 真的 ,则无需在第二个条件下获取文档。