Строковые функции в Cloud Firestore Rules - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно удалить сигнал плюс в строке, возвращенной request.auth.phone_number.Для этого я попытался использовать функцию замены, но получил следующую ошибку: «Ошибка функции не найдена: Имя: [заменить].»;

match /test/{id} {
  allow read, update, delete, create: if request.auth != null && (resource.data.items[request.auth.token.phone_number.replace('+', '')] == true || resource == null);
}

Это прекрасно работает, когда язапустить в базе данных в реальном времени.Например:

"tests": {
  "$uid": {
    ".write": "auth.uid.replace('+', '') === '5521999991234'"
  }
}   

Есть ли какой-либо способ использовать строковые функции, такие как "contains (), replace (), toLowerCase ()" и т. Д., В базах данных Cloud Firestore?

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете написать такую ​​функцию:

function replace(string, replace, by) {
  return string.split(replace).join(by)
}

и использовать ее так ..

replace('+3312312345', '+', '')

в вашем примере:

match /test/{id} {
  allow read, write: if request.auth != null && 
  (resource.data.items[replace(request.auth.token.phone_number, '+', '')] 
  == true || resource == null);
}

// below your rules
function replace(string, replace, by) {
  return string.split(replace).join(by)
}
0 голосов
/ 25 февраля 2019

Правила безопасности Firestore используют совершенно другой язык, чем база данных Realtime.

Список всех методов, доступных для строковых объектов, можно найти в документации API .Единственное, что вы просите сделать, это на самом деле доступно: ниже и совпадений .

...