Rba*_*bar 5 firebase firebase-security firebase-storage
我想允许用户只将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然让他们删除文件。我添加了以下内容:
match /myusers/{userId}/{allPaths=**} {
allow write: if request.auth.uid == userId && request.resource.size < 1 * 1024 * 1024;
allow read: if request.auth.uid == userId;
}
Run Code Online (Sandbox Code Playgroud)
我正在模拟器中进行测试并在我的项目中进行测试。这不会让我删除文档 ( access denied)。如果我&& request.resource.size < 1 * 1024 * 1024;从上面的规则中删除,则可以删除该文档(但不会阻止上传大于 1MB 的文件。
我想可能是因为request.resourceis拒绝它null,所以我尝试了以下操作:
match /myusers/{userId}/{allPaths=**} {
allow write: if request.auth.uid == userId && (request.resource.size < 1 * 1024 * 1024 || request.resource == null);
allow read: if request.auth.uid == userId;
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,删除失败并出现以下错误(在模拟器中):
错误:simulator.rules 行 [5],列 [16]。对象上的属性资源未定义。
我已经查看了所有这些解决方案并尽可能多地修改了规则,但无济于事:
有谁知道如何为允许的文件设置最大大小但仍然允许删除?
弄清楚了!这是在生产环境和模拟器中都有效的方法:)
match /myusers/{userId}/{allPaths=**} {
allow write: if request.auth.uid == userId &&
(request.resource.size < 1 * 1024 * 1024 || request.method == 'delete');
allow read: if request.auth.uid == userId;
}
Run Code Online (Sandbox Code Playgroud)
ps @Doug Stevenson,如果您能够在内部提交注释,我想如果可以将带有、、和/或 的request.method示例添加到文档中,这对其他人将非常有帮助!deleteupdategetcreate
编辑:
此外,这在模拟器和生产中都有效(在我看来,比第一个选项更具可读性)。感谢@Doug Stevenson 的提示!
match /myusers/{userId}/{allPaths=**} {
allow write: if request.auth.uid == userId && request.resource.size < 1 * 1024 * 1024;
allow delete: if request.auth.uid == userId
allow read: if request.auth.uid == userId;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |