【问题标题】:Firebase cloud storage rule for custom metadata自定义元数据的 Firebase 云存储规则
【发布时间】:2021-06-25 15:52:17
【问题描述】:

在 firebase 存储安全规则中,对于删除权限,我想检查文件中是否不存在自定义元数据键。我将locked 键作为自定义元数据来拒绝删除请求。因此,如果文件没有locked 元数据,则表示允许删除。

到目前为止我尝试了什么:

allow delete: if resource.metadata.locked != true

allow delete: if !resource.metadata.locked

甚至:

allow delete: if resource.metadata.size() == 0;

在 Firebase 控制台上,当我检查相关文件时,它会写成“未找到元数据”。

但以上都没有工作。如何检查文件是否没有特定的元数据密钥?

【问题讨论】:

  • 我认为列出了唯一允许的文件元数据属性here in firebase docs所以要访问锁定的属性我相信它应该是resource.metadata.customMetadata.locked

标签: firebase firebase-storage firebase-security


【解决方案1】:

我已经在安全规则操场上快速进行了一些测试,结果如下:

  • 如果 Storage 对象没有元数据,if resource.metadata.locked != trueif resource.metadata.unlocked == "true" 之类的规则将生成错误“属性元数据未在对象上定义”。
  • 如果您将自定义元数据设置为布尔值 true(例如,在 JavaScript var metadata = {customMetadata: { locked: true },};) 中,在安全规则中,您应该检查 String true

结论(如果我没记错的话):例如,您需要有一个名为 unlocked 的自定义元数据,并使用以下规则:

allow delete: if resource.metadata.unlocked == "true";.

【讨论】:

  • 感谢您的回复。如果有元数据,它会按说明工作。但问题是,我的文件没有默认的“锁定”元数据。当规则检查时,如您所说,它会产生错误。因为在另一个规则案例中,我必须检查是否存在任何元数据。他们在文档中写道:resource.metadata.size() == 1 在一个例子中。但它对零不起作用。你知道为什么它不适用于零尺寸吗?
  • “在文档中他们写道:resource.metadata.size() == 1 在一个例子中。但它不适用于零。你知道为什么它不适用于零尺寸吗?” =>我认为这是因为anwser“属性元数据未在对象上定义”中提到的相同问题。 => 因此你不能在上面调用size()。我试过检查resource.metadata == nullundefined 但没有成功...
  • 好吧,这似乎没有办法。我决定设置一个默认元数据“解锁”并在规则中检查它。
猜你喜欢
  • 2017-07-27
  • 2018-12-19
  • 2019-07-20
  • 2021-07-19
  • 2022-01-23
  • 1970-01-01
  • 2020-05-28
  • 2017-01-08
  • 2018-05-29
相关资源
最近更新 更多