Firebase 如何计算get()嵌套get()的Firestore安全规则访问限制?

Firebase 如何计算get()嵌套get()的Firestore安全规则访问限制?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,对于单文档请求和查询请求,有两种类型。对于“STANDARD”的访问角色,下面的代码段将有多少个访问调用 function isOwnerOfTeam(teamId, userId) { return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'OWNER' } function isAdminOfTeam(teamId, userId) { return

对于单文档请求和查询请求,有两种类型。对于“STANDARD”的访问角色,下面的代码段将有多少个访问调用

function isOwnerOfTeam(teamId, userId) {
  return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'OWNER'
}

function isAdminOfTeam(teamId, userId) {
  return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'ADMIN'
}

function isStandardOfTeam(teamId, userId) {
  return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'STANDARD'
}

function isTeamMember(teamId, userId) {
  return isOwnerOfTeam(teamId, userId) || isAdminOfTeam(teamId, userId) || isStandardOfTeam(teamId, userId)
}

如果我有一个带有或运算符的get()嵌套get()。有多少个接入电话

比如说

function getTeamId(teamName) {
  get(/databases/$(database)/documents/team/$(teamName)).data[id]
}

match /teamSecretStory/{teamName} {
      allow read: if isTeamMember(getTeamId(teamName), request.auth.uid);
}

总之,对于角色“STANDARD”,这个get()嵌套get()与OR运算符的访问次数是多少?

安全规则与所有主要编程语言一样,从左到右短路其逻辑OR。每个OR从左到右求值,直到其中一个OR求值为真,或所有OR求值为真。逻辑AND也一样,除了第一次错误评估将停止整个电路。

更正:每个OR都从左到右评估,直到其中一个评估为真…我需要您的帮助,以最佳和最坏情况计算它。对于isTeamMember(),最好的情况是1个get()访问调用。最坏的情况是3个get()访问调用。get()嵌套get()的情况如何?在isTeamMember(getTeamId(teamName)、request.auth.uid)的访问调用数量中,最好的情况和最坏的情况是什么?我认为您可以根据我给出的描述来确定需要什么。如果您有后续问题,请将其作为其他问题进行提问。get()没有“嵌套”调用,只有顺序调用。
function isOwnerOfTeam(teamId, userId) {
  return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'OWNER'
}

function isAdminOfTeam(teamId, userId) {
  return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'ADMIN'
}

function isStandardOfTeam(teamId, userId) {
  return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'STANDARD'
}

function isTeamMember(teamId, userId) {
  return isOwnerOfTeam(teamId, userId) || isAdminOfTeam(teamId, userId) || isStandardOfTeam(teamId, userId)
}