Возможно сделать If Else или Правила Firestore оператора Switch - PullRequest
0 голосов
/ 28 мая 2019

Можно ли сделать оператор смены или если еще в правилах пожарного депо?

Я пытался найти его, но не нашел ответа.

То, что я пробовал, было

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()
}

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Правила Firestore предназначены для определения правил доступа к определенным коллекциям в вашем Проекте. Они в основном используются для проверки доступа для пользователя. Они не предназначены для чего-либо другого, кроме проверки логики. Поэтому они не поддерживают операторы switch, if..else условия и условные выражения.

Вы можете использовать условие ИЛИ, чтобы проверить, может ли пользователь добавить продукт в соответствии с уровнем пользователя, которому он / она принадлежит.

function canAddProduct() {
    return ( getTier() == 'UserTier.FREE' || getTier() == 'UserTier.SILVER' 
             || getTier() == 'UserTier.GOLD' || getTier() == 'UserTier.COMPANY' );
} 

Это самый простой способ проверки доступа.

Однако для вашего конкретного случая попробуйте это. Я предполагаю, что у вас есть дополнительные проверки пользователя в соответствии с уровнем, к которому они принадлежат. Здесь я проверяю, истек ли пробный период пользователя, только если он принадлежит БЕСПЛАТНО.

function getUser() {
//Get the user
    return get(/users/$(request.auth.uid)).data;
}

function canAddProduct() {
    return ( getTier() == 'UserTier.FREE' && checkFreeTierAccess(getUser()) || 
             getTier() == 'UserTier.SILVER' && checkSilverTierAccess(getUser()) ||
             getTier() == 'UserTier.GOLD' && checkGoldTierAccess(getUser()) ||
             getTier() == 'UserTier.COMPANY' && checkCompanyTierAccess(getUser())
           );
 } 

function checkFreeTierAccess(user) {
//do the checks
    return user.isTrailPeriodExpired;
}

Надеюсь, это решит вашу проблему.

0 голосов
/ 22 июля 2019

Еще один взлом, о котором следует знать, это использование объектов. Мне понадобилось время, чтобы понять, что это возможно. Вы можете поместить свои различные дела в объект и использовать ключи объекта в качестве переключателя.

function switchOnTier(tier) {
  return {
    'UserTier.FREE': doSomethingBasedOnFreeTier(),
    'UserTier.SILVER': doSomethingBasedOnSilverTier(),
    'UserTier.GOLD': doSomethingBasedOnGoldTier(),
    'UserTier.COMPANY': doSomethingBasedOnCompanyTier()
  }[tier]
}

Который вы можете затем использовать как это ..

return switchOnTier(getTier())

Я использую это для простого случая умножения строки (что было на удивление трудно сделать)

function pluralize(str) {
  return {
    'AccessToken': 'AccessTokens',
    'Image': 'Images',
    'Index': 'Indexes'
  }[str]
}

Надеюсь, это поможет кому-то еще изо всех сил пытаться понять это.

...