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



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

function isAModerator() {
return request.auth.token.moderator == true
}

但是我不知道如何做某事,如果Firebase安全规则中的其他声明,我想做这样的事情

if (aModerator) {
canUpdateCapacity()
} else {
canNotUpdateCapacity()
}

我已经阅读了这个可以做一个 If Else 或一个开关语句 Firestore 规则,但它与我的情况不同,因为它使用 Map,map 的键必须在字符串中

没有明确的"if-else"语法。

对于您的用例,您可以通过应用容量无法更改的限制来实现您想要的结果,但如果用户是审核人,则允许该条件失败:

service cloud.firestore {
match /databases/{database}/documents {
function isAModerator() {
return request.auth.token.moderator == true
}
// Make sure only moderators can change capacity
match /items/{item} {
allow update: if request.resource.data.capacity == resource.data.capacity
|| isAModerator()
}
}
}

这里||是一个 OR 操作。您还可以将&&用于 AND 操作。

锻炼

此结果是使用布尔算术实现的。

if (aModerator) {
return true; // no restriction
} else {
return enforceRestrictions(); // allow only if restrictions are satisfied
}

可以改写为

(aModerator && true) || (!aModerator && enforceRestrictions())

可以简化为

aModerator || (!aModerator && enforceRestrictions())

可以扩展到

(aModerator || !aModerator) && (aModerator || enforceRestrictions())

可以简化为

true && (aModerator || enforceRestrictions())

这成为

aModerator || enforceRestrictions()

最新更新