firebase实时数据库 - 云firestore规则中的字符串功能



我需要在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(),repleast(),tolowercase()"等,在云firestore数据库中?

谢谢

您可以写下这样的函数:

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

firestore安全规则使用与实时数据库完全不同的语言。

您可以在API文档中的字符串对象上查看所有方法的列表。您唯一要做的实际上可用的是较低的匹配。

更新:几个月前添加了.replace()方法。您现在可以做

之类的事情
request.auth.token.phone_number.replace('\+', '')

请注意,第一个参数是正则格式为字符串。

文档:https://firebase.google.com/docs/reference/rules/rules.string.html#replace

最新更新