Tin*_*son 6 firebase-security google-cloud-firestore
是否可以在 Firestore 规则中执行 Switch 语句或 if else?
我试图搜索它,但没有找到答案。
我试过的是
function getTier() {
return get(/users/$(request.auth.uid)).data.userTier;
}
function canAddProduct() {
if getTier() == 'UserTier.FREE'
// Do additional code
return doSomethingBasedOnFreeTier();
else if getTier() == 'UserTier.SILVER'
// Do additional code
return doSomethingBasedOnSilverTier()
else if getTier() == 'UserTier.GOLD'
// Do additional code
return doSomethingBasedOnGoldTier()
else if getTier() == 'UserTier.COMPANY'
// Do additional code
return doSomethingBasedOnCompanyTier()
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
另一个需要注意的技巧是使用对象。我花了一段时间才发现这是可能的。您可以将不同的案例放入一个对象中,并使用对象键作为开关。
function switchOnTier(tier) {
return {
'UserTier.FREE': doSomethingBasedOnFreeTier(),
'UserTier.SILVER': doSomethingBasedOnSilverTier(),
'UserTier.GOLD': doSomethingBasedOnGoldTier(),
'UserTier.COMPANY': doSomethingBasedOnCompanyTier()
}[tier]
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用..
return switchOnTier(getTier())
Run Code Online (Sandbox Code Playgroud)
我将它用于尝试对字符串进行复数化的简单案例(这出奇地难以做到)
function pluralize(str) {
return {
'AccessToken': 'AccessTokens',
'Image': 'Images',
'Index': 'Indexes'
}[str]
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助其他任何努力解决这个问题的人。
截至 2020 年 2 月 13 日,Firestore 现已支持三元运算符
https://firebase.google.com/support/release-notes/security-rules#february_13_2020
这是可用运算符的文档(三元位于底部)
https://firebase.google.com/docs/rules/rules-language#building_conditions
从问题中获取示例代码,可以通过使用一组嵌套的三元运算符来实现解决方案
function getTier() {
return get(/users/$(request.auth.uid)).data.userTier;
}
function canAddProduct() {
return getTier() == 'UserTier.FREE' ?
doSomethingBasedOnFreeTier() :
(
getTier() == 'UserTier.SILVER' ?
doSomethingBasedOnSilverTier() :
(
getTier() == 'UserTier.GOLD' ?
doSomethingBasedOnGoldTier() :
(
getTier() == 'UserTier.COMPANY' ?
doSomethingBasedOnCompanyTier() :
null
)
)
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |