Firebase Cloud Storage 规则能否针对 Firestore 数据进行验证?

Posted

技术标签:

【中文标题】Firebase Cloud Storage 规则能否针对 Firestore 数据进行验证?【英文标题】:Can Firebase Cloud Storage rules validate against Firestore data? 【发布时间】:2018-04-02 09:15:21 【问题描述】:

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

我想用作 Firebase 安全规则的示例

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

【问题讨论】:

【参考方案1】:

目前无法从其他产品的安全规则中访问不同的 Firebase 产品。见:is there a way to authenticate user role in firebase storage rules?

但您似乎正在尝试检查用户的组成员身份。我建议您将其建模为所谓的自定义声明,而不是在数据库中查找该组成员。您将 set the claim "user uid is a member of group guild1" into the user profile using the Firebase Admin SDK:

代替(或除此之外)将成员资格写入数据库
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.
);

完成后,您可以在安全规则中检查公会成员身份:

allow read: if request.auth.token.guild1 == true;

(我不确定您是否/如何将公会成员建模为地图,如果是这种情况,我将更新此答案。)

【讨论】:

有道理。将尝试使用 Cloud Firestore 触发器根据数据库填充自定义声明,并查看是否成功 @frank-van-puffelen 到 2021 年还是这样吗 您无法从安全规则中访问其他产品的事实和解决方法仍然有效。 你也可以做一个cloud storage trigger,如果没有通过firebase验证,它最终会删除上传。 是的,这始终是一个选项@Jonathan。如果您可以详细说明如何做到这一点,它可能是一个很好的替代答案。

以上是关于Firebase Cloud Storage 规则能否针对 Firestore 数据进行验证?的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Storage for Firebase 访问错误“admin.storage(...).ref 不是函数”

Google Cloud Storage 上传是不是会触发 Firebase Cloud 功能?

使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题

“同时”使用 Firebase Storage 和 Cloud Firestore

如何在 Firebase Cloud Storage 上创建存储桶

如何使用 PHP 在 Firebase 中自动导入存储桶 - Google Cloud Storage