gpt4 book ai didi

firebase - 有没有办法让三元运算符适用于 Cloud Firestore 安全规则?

转载 作者:行者123 更新时间:2023-12-03 08:48:44 27 4
gpt4 key购买 nike

在我们的 Firebase 设置中,我们将用户的角色存储在自定义声明中。因此,在我们的 Cloud Firestore 安全规则中,我们需要评估用户是否具有执行操作的适当角色。因此,我创建了函数 getRole,它可以方便地从用户的身份验证 token 获取请求的值。然而,在某些边缘情况下,用户还没有角色,在这些情况下,我希望他们的角色评估为尽可能最低的安全角色,在我们的例子中,这只是“user” 。我阅读了 CEL(通用表达式语言)的语言规范,这是该规则语言所基于的,并且它实际上支持三元运算符。 (Doc)。因此,我将此代码插入到我的 Firestore 安全规则中,在线编辑器验证了这些规则并接受了我的新规则。但是,我后来发现在本地运行我的安全规则单元测试并在 firebase 模拟器中加载规则时,出现此错误:

错误不允许使用三元运算符

因此,要么生产 Firestore 规则支持三元运算符,而本地模拟器不支持,要么生产规则针对 CEL 进行验证并在不应该通过验证的情况下通过验证。

无论如何,我希望能够安全地拥有一个函数,该函数返回用户角色的实际值,或者如果未设置,则返回默认的安全值。

请注意,我们尝试省略 getCustomClaims() 语句中的'role',如果自定义声明中不存在该键,该语句就会崩溃。



function getCustomClaims() {
return request.auth.token;
}
function getRole() {
return 'role' in getCustomClaims() ? getCustomClaims()['role'] : 'user';
}

最佳答案

您可以在没有三元运算符的情况下完成这项工作。从 rules API documentation 可以看到, request.auth.token 是一个 map 类型对象。 Map 的 API 文档说有一个方法叫做 get()如果未找到传递的 key ,它接受默认(“安全”)值以返回:

getCustomClaims().get("role", "user")

关于firebase - 有没有办法让三元运算符适用于 Cloud Firestore 安全规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60217594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com