我想允许用户只将文档上传到自己的存储桶中,最大文件大小为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;
}
我正在模拟器中进行测试并在我的项目中进行测试。这不允许我删除该文档(access denied
)。如果我删除&& request.resource.size < 1 * 1024 * 1024;
根据上面的规则,可以删除该文档(但不会阻止上传大于 1MB 的文件。
我想也许它拒绝它是因为request.resource
is 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;
}
尽管如此,删除失败并出现以下错误(在模拟器中):
错误:simulator.rules 行 [5],列 [16]。对象上未定义属性资源。
我已经查看了所有这些解决方案并以我能想到的多种方式修改了规则,但无济于事:
Firebase 存储允许删除文件 https://stackoverflow.com/questions/40534295/firebase-storage-allow-deleting-files
Firestore 规则模拟器 - 资源未定义 https://stackoverflow.com/questions/51874357/firestore-rules-simulator-resource-undefined
Firebase 存储发布规则适用于删除规则 https://stackoverflow.com/questions/38922124/firebase-storage-post-rules-apply-to-delete-rules
用于删除的 Firebase Cloud Storage 安全规则 https://stackoverflow.com/questions/50919867/firebase-cloud-storage-security-rule-for-deleting
有谁知道如何设置允许但仍允许删除的文件的最大大小?
弄清楚了!这是在生产中有效的方法and在模拟器中:)
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;
}
附注@Doug Stevenson,如果您能够在内部提交注释,我想这对其他人来说会非常有帮助request.method
的例子delete
, update
, get
,和/或create
可以添加到文档中!
EDIT:
此外,这在模拟器和生产中都有效(在我看来,比第一个选项更具可读性)。感谢@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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)