在编写Firebase存储规则时,似乎没有一种方法可以区分对象创建/覆盖还是元数据更新。
特别是对于我的用例,我希望用户能够创建一个对象(如果该对象不存在),但是一旦存在,它可能不会被新对象覆盖。但是,用户应该能够更新对象的元数据。
Firebase Firestore规则允许您使用create
和update
而不是write
来区分创建和更新,但是在存储规则文档中我没有看到这样的等效功能。
Firestore规则示例:
allow create: if resource == null;
allow update: if true;
在存储规则中,如果可以指定类似以下规则,那就太好了
allow write: if resource == null || request.resource.metageneration != '1'
在上述假设规则中,如果当前不存在对象,或者如果请求的写入结果不会产生元生成“ 1”,则我们将允许写入,因为新对象的元生成为“ 1” ,但元数据更新产生的元代数大于“ 1”。
当然,上面的规则不起作用,因为request.resource
变量不包含metageneration
属性。
那么,还有其他方法可以区分对象覆盖与现有对象上的元数据更新吗?