【问题标题】:Firebase Cloud Storage security rule for deletingFirebase Cloud Storage 删除安全规则
【发布时间】:2018-11-27 21:55:30
【问题描述】:

您好,我正在使用 Firebase Cloud Storage 开发 Web 应用程序。我想为从删除文件中设置文件设置不同的安全规则。根据文档,write 似乎包括它们两者。有谁知道如何解决这个问题?

我想做的就是这个。

  1. 任何人都可以在登录后设置文件。
  2. 只有设置文件的用户才能删除它。

【问题讨论】:

  • Cloud Functions 没有安全规则。只有 Cloud Storage、Cloud Firestore 和实时数据库具有针对客户端应用强制执行的安全规则。使用管理 SDK 的 Cloud Functions 绕过这些规则。
  • 感谢您的回复。我在标题中写了 Cloud Function 是我的错误。我编辑了标题。我想问一下 Cloud Storage。

标签: firebase firebase-storage firebase-security


【解决方案1】:

您可以在规则中使用request.resource == null 检测文件正在被删除。

但是文件对象(我知道)中没有属性可以知道谁创建了文件。

一种常见的方法是将文件存储在标识其创建者的路径下,例如/users/$uid/filename。使用该结构,您可以像这样检查:

match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth.uid == userId && request.resource == null;
}

另一种方法是将owner 属性添加到每个文件的元数据,然后检查:

match /{fileId} {
  allow read;
  allow write: if (request.auth.uid == resource.metadata.owner && request.resource == null);
}

【讨论】:

  • 太棒了!通过提供两个 if,您可以为删除、创建和更新制定单独的规则。我会尝试这种方法。