Firebase 我可以在firestore安全规则中执行类似if else语句的操作来设置不同的操作吗?

Firebase 我可以在firestore安全规则中执行类似if else语句的操作来设置不同的操作吗?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,在我的文档中,有3个属性:价格、容量、标题。我只想版主,可以更新的能力。我使用自定义声明来区分普通用户或版主 function isAModerator() { return request.auth.token.moderator == true } 但我不知道在firebase安全规则中如何做if-else语句,我想做这样的事情 if (aModerator) { canUpdateCapacity() } else { canNotUpdateCapacity() }

在我的文档中,有3个属性:价格、容量、标题。我只想版主,可以更新的能力。我使用自定义声明来区分普通用户或版主

function isAModerator() {
    return request.auth.token.moderator == true
}
但我不知道在firebase安全规则中如何做if-else语句,我想做这样的事情

if (aModerator) {
   canUpdateCapacity()
} else {
   canNotUpdateCapacity()
}
我读过这篇文章,但它与我的案例不一样,因为它使用Map,Map的键必须是字符串

没有明确的“if-else”语法

对于您的用例,您希望的结果可以通过应用容量不能更改的限制来实现,但如果用户是版主,也允许该条件失败:

service cloud.firestore{
匹配/databases/{database}/documents{
函数是调节器(){
return request.auth.token.版主==true
}
//确保只有版主可以更改容量
匹配/items/{item}{
允许更新:如果request.resource.data.capacity==resource.data.capacity
||主持人()
}
}
}
这里的
|
是一个OR操作。您还可以对和操作使用
&&

制定 这个结果是使用布尔运算得到的

if(aModerator){
返回true;//无限制
}否则{
return enforceRestrictions();//仅当满足限制时才允许
}
可以重写为

(aModerator&&true)| |(!aModerator&&enforceRestrictions())
可以简化为

aModerator | |(!aModerator&&enforceRestrictions())
可以扩展到

(aModerator | | |!aModerator)&(aModerator | | enforceRestrictions())
这可以简化为

true&(aModerator | | enforceRestrictions())
变成

aModerator | | enforceRestrictions()

另一个问题中的建议仍然适用。必须使用逻辑AND和OR语句为权限返回单个布尔值。安全规则没有“做点什么”。每个表达式的计算结果都必须是一个布尔值。下面总结了简化规则。使用的符号是
用于或(
|
)和
for AND(
&&&
)如果您还想限制对登录用户的更新,您可以使用
isLoggedIn()&&&(request.resource.data.capacity==resource.data.capacity | isauditor())