【发布时间】:2020-02-26 20:39:18
【问题描述】:
对于我们的应用,我们需要能够为群组提供文件访问权限。每个用户可以拥有大量的组,因此使用“自定义令牌”解决方案没有意义(无论如何这很尴尬。
我发现,Firebase 的存储安全规则非常有限。主要问题是我们将组定义保留在存储安全规则无权访问的 Firestore 中。
为了克服这个问题,我们决定在每个上传文件的元数据中包含一个“令牌”,该组中的任何人都可以访问该令牌。当他们下载文件时,他们需要在请求参数中提供此令牌(例如 /groups/xxx/filename.jpg?token=abc)。
所以我继续写了这些规则:
match /groups/{groupId}/{filename} {
allow read: if request.auth != null && request.params.token == resource.metadata.token;
allow write: if request.auth.uid == userId
&& request.resource.size < 1 * 1024 * 1024
&& request.resource.contentType.matches('image/.*')
&& (resource == null || request.resource.contentType == resource.contentType)
&& imageId.size() < 32
;
}
但是当我在模拟器中运行它时出现错误:“错误:simulator.rules 行 [23],列 [43]。属性参数未在对象上定义。”它指向带有“request.params.token”的规则
文档明确指出我们可以从请求对象访问 params 对象:https://firebase.google.com/docs/storage/security/secure-files?authuser=0#request_evaluation
【问题讨论】:
标签: firebase firebase-storage firebase-security