如何将 Firebase 存储规则部署到特定存储桶?

gal*_*lki 5 firebase firebase-security firebase-storage firebase-cli

我想知道 Firebase 中的存储规则部署是如何工作的。

在 Firebase 存储中,我有 2 个存储桶app.appspot.comapp-mybucket. 在我的本地机器上,我有一个storage.rules看起来像这样的文件:

service firebase.storage {
  match /b/app.appspot.com/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
  match /b/app-mybucket/o {
    match /{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我将firebase deploy --only storage这些规则发送到默认app.appshpot.com存储桶时,似乎没有任何内容发送到app-mybucket. 我想知道一种可以将规则部署到所有存储桶的方法。

dvd*_*mmc 16

在您的 firebase.json 文件中,您可以指定如下内容:

  "storage": [{
    "rules": "my-appspot.rules",
    "bucket": "app.appspot.com"
  },
  {
    "rules": "my-bucket.rules",
    "bucket": "app-mybucket"
  }]
Run Code Online (Sandbox Code Playgroud)

上面的示例对每个存储桶使用不同的规则,如果您愿意,也可以对每个存储桶使用相同的规则。

  • @galki,`firebase deploy --only storage:rules` 将所有规则部署到所有存储桶 (3认同)

Eri*_*orn 8

您还可以使用部署目标。更多信息可以在这里找到。

例子

  1. 使用 CLI 应用新目标(在本例中为“main”)
firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja
Run Code Online (Sandbox Code Playgroud)
  1. 更新firebase.json
firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja
Run Code Online (Sandbox Code Playgroud)
  1. 使用
firebase deploy --only storage:main
Run Code Online (Sandbox Code Playgroud)