【问题标题】:Firesbase Storage security rules allow update rule not followedFirebase 存储安全规则允许不遵循更新规则
【发布时间】:2021-07-14 00:19:23
【问题描述】:

Firesbase 存储安全规则允许更新不起作用,无法防止文件覆盖。

示例规则:

match /test/{userId}/{imageId} {
        allow create: if request.auth.uid == userId;
        allow update: if false;
    }

这里我只允许经过身份验证的用户“创建”文件,但不能更新/覆盖。

预期行为:不应允许更新/覆盖现有文件。

实际行为:当我再次上传不同的文件,但文件名相同时{覆盖现有文件},则允许更新/覆盖。

如何防止文件更新?

【问题讨论】:

  • 您共享的规则中没有任何内容可以防止覆盖现有文件。为此,您需要检查是否存在如下所示的现有资源:stackoverflow.com/questions/38995011/…
  • 哦,等等,我现在看到您已拆分 createupdate。嗯...我从来没有在 Storage 上这样做过,只有在 Firestore 上。但看起来这也适用于存储:firebase.google.com/docs/storage/security/…,所以我不确定你出了什么问题。
  • @FrankvanPuffelen 是的,我使用了粒度操作,将createupdate 分开。我也用firestore检查过这个,它可以工作,但存储不起作用。

标签: firebase firebase-storage firebase-security


【解决方案1】:

我尝试在 Firebase Storage 中创建与您相同的结构,结果发现这些规则对我有用。

我怀疑您的结构是否类似于/test/{userId}/images/{imageId},如果您要存储用户生成的内容,这更有意义。 如果是以上的话,那么请将规则更新为:/test/{userId}/images/{imageId}

如果问题仍然存在,请分享您的 Firebase 存储目录结构的屏幕截图。

【讨论】:

  • 在模拟器中可以进行update操作。但在 android/web 中,你只需使用put file,即添加文件。所以当我添加到同一个文件位置时,这应该算作更新,不应该被允许。
  • @hkchakladar 只是为了清楚,你是说它在同一个参考中添加另一个文件吗?如果对象的路径相同,那么如果规则允许,它应该覆盖该对象。
  • 来自您的评论 - “如果对象的路径相同,那么如果规则允许,它应该覆盖该对象。”它应该覆盖规则中允许的对象。我的问题是我已经禁用了覆盖,但它仍然被覆盖。
猜你喜欢
  • 2021-01-03
  • 2021-07-08
  • 2020-07-11
  • 2023-04-10
  • 2020-05-24
  • 2020-07-03
  • 2016-02-26
  • 2017-08-02
相关资源
最近更新 更多