微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Firebase 云存储安全规则在 resource.metadata 上使用 Google 的 RE2“匹配”

如何解决Firebase 云存储安全规则在 resource.metadata 上使用 Google 的 RE2“匹配”

此 Firebase Cloud Storage 规则失败(特别是“匹配”条件)。如果我删除它,当然,一切正常。或者,如果我拆分 resource.Metadata.sentTo 字段,如您在本文底部看到的那样,它也可以工作。

我的 RE2“匹配”正则表达式条件的语法错误是什么?显然,简单地放置一串字符是失败的。在评估时,假设 request.auth.uid 包含存储在 resource.Metadata.sentTo 中的 ID 之一?

rules_version = '2';
service firebase.storage {

  function isSignedIn() {
      return request.auth != null;
  }
  
  match /b/{bucket}/o {
    match /accounts/{senderUid}/sent/{allPaths=**} {
        allow read: if isSignedIn() 
        && resource.Metadata.sentTo.matches(request.auth.uid);
    }
  }
}

我试图访问的 Storage 中的对象有一个 resource.Metadata.sentTo 字段,该字段设置为一串 uid,例如wQGc8YO1lovcW70FvD0fHwf04y72,LaOZzqOInUYlZJYcYg0D2Ghc8u43

根据 storage rules matches docs,我可以使用 RE2 执行正则表达式,我已经 tested。在下面的屏幕截图中,您可以看到我选择了使用 RE2 的 Golang。使用 uid 之一的简单检查在此在线工具中工作正常,但在存储规则中无效。

enter image description here

此外,更多的是仅供参考,有很多方法可以给众所周知的猫剥皮。这适用于 resource.Metadata.sentTo 字段条件。

rules_version = '2';
service firebase.storage {

  function isSignedIn() {
      return request.auth != null;
  }
  
  match /b/{bucket}/o {
    match /accounts/{senderUid}/sent/{allPaths=**} {
        allow read: if isSignedIn() 
        && request.auth.uid in resource.Metadata.sentTo.split('\\,');
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。