firebase - 如何计算/计算 get() 嵌套 get() 的 Firestore 安全规则访问限制?
问题描述
单文档请求和查询请求的 get() 限制为 10 个。对于“标准”的访问角色,以下代码段将有多少次访问调用?
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)
}
如果我有一个带有 OR 运算符的 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);
}
总而言之,这个 get() 嵌套 get() 与角色“标准”的 OR 运算符有多少访问权限?
解决方案
像所有主要的编程语言一样,安全规则将它们的逻辑 OR 从左到右短路。从左到右对每个 OR 进行评估,直到其中一个评估为真,或所有 OR 评估为真。与逻辑与相同,除了第一次错误评估将停止整个电路。
推荐阅读
- node.js - 如何在 react-Nodejs Web 应用程序中传递令牌(数据)(从 nodejs 文件到 react tsx 文件)
- c# - 访问被 Azure AD B2C 锁定的 Azure 函数应用时收到 403 错误
- airflow - 当 schedule_interval 设置为 @once 时,只有 dag 中的第一个任务在气流中执行
- html - 有没有办法创建没有网格线的表格?
- python - python:导入对象似乎不一致地破坏现有对象?
- excel - 如何分为 3 个年龄类别
- email - 直接从表单发送电子邮件
- angular - rxjs 错误处理 > 在 catchError 源停止发射
- android - 根据不同场景更改通知内容文本
- java - JavaFX 重复子 PieChart