Firebase云存储规则可以针对Firestore数据进行验证吗?

Rem*_*emi 13 firebase firebase-security firebase-storage google-cloud-firestore

我们是否可以使用Firestore数据授予或限制对Firebase Cloud Storage上托管的文件的访问权限?

我希望用作Firebase安全规则的例子

allow write: if get(/databases/mydbname/documents/guilds/$(guildID)).data.users[(request.auth.uid)] in ["Admin", "Member"];
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 11

目前无法从其他产品的安全规则中访问不同的Firebase产品.请参阅:有没有办法在firebase存储规则中验证用户角色?

但似乎您正在尝试检查用户的组成员身份.我建议您将其建模为所谓的自定义声明,而不是在数据库中查找该组成员身份.除了(或除此之外)将成员资格写入数据库之外,您还可以使用Firebase管理SDK将声明"用户{uid}是组{guild1}的成员"设置到用户配置文件中:

admin.auth().setCustomUserClaims(uid, {guild1: true}).then(() => {
  // The new custom claims will propagate to the user's ID token the
  // next time a new one is issued.
});
Run Code Online (Sandbox Code Playgroud)

完成后,您可以检查安全规则中的公会成员资格:

allow read: if request.auth.token.guild1 == true;
Run Code Online (Sandbox Code Playgroud)

(我不确定你是否/如何将公会会员资格建模为地图,如果情况确实如此,我会更新这个答案.)

  • @frank-van-puffelen 截至 2021 年,情况仍然如此吗 (5认同)
  • 您无法从安全规则内访问其他产品的事实和解决方法仍然有效是的。 (2认同)

Dha*_*raj 9

Firebase 最近发布了跨服务安全规则,让您可以在 Firebase 存储的安全规则中访问 Firestore 数据。您只需要在和函数之前使用firestore.前缀,如下所示:get()exist()

allow write: if firestore.get(/databases/(default)/documents/col/docId/).data.field == "value";
Run Code Online (Sandbox Code Playgroud)

Firebase 当前仅支持每个项目 1 个数据库实例,因此名称必须位于(default)路径中。它不是 Firestore 规则中的通配符,所以不是$(database)