【问题标题】:user access and data control to cloud firestore when calls to firestore are made server side在服务器端调用 Firestore 时,用户对 Cloud Firestore 的访问和数据控制
【发布时间】:2018-07-25 12:47:36
【问题描述】:

我使用 nodejs、express、firebase 函数、firestore 开始了一个基于 Web 的项目,并最终想使用 firebase 托管。到目前为止,我已经能够将所有内容保留在服务器端,直到达到授权和身份验证。我正在使用模型视图控制器结构,因此对 firestore 的调用是在服务器端进行的,因此 firestore 安全规则不起作用。 Firestore 安全规则仅在您访问 Firestore 客户端时才有效。

我可以像使用 Cloud Firestore 安全规则一样使用 google cloud IAM(身份和访问管理)来控制用户读取/写入 Firestore 的能力级别吗?

如果是这样,它就像在 MySQL 中设置不同的用户一样工作:

grant INSERT, UPDATE, SELECT on name_of_database.* to 'admin_webuser'@'%';
grant SELECT on name_of_database.* to 'user_webuser'@'%';

因此,当管理员登录时,他们使用 admin_webuser 连接到数据库 如果其他人登录,他们会使用 user_webuser 连接到数据库。

我可以通过 nodejs、express、firebase 函数实现上述设置,以使用 IAM 连接到 Firestore?

目前在我的模型文件夹中,我通过以下方式调用 firestore:

const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp(functions.config().firebase);

我假设我可以更改 admin.initializeApp(functions.config().firebase); 部分以根据已设置的 IAM 规则访问不同的配置文件?那么,当管理员登录我的网站时,我可以使用带有不同配置文件的模型文件夹吗?

我已通读 IAM 上的文档,但它没有任何意义。 有人可以给我建议:

  1. 如何设置可以使用 IAM 在 Firestore 上执行 CRUD 的管理员?

  2. 然后我将如何安排以便当管理员登录我的 只有网站他们可以在 Firestore 上执行 CRUD 操作?

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions firebase-admin google-cloud-iam


    【解决方案1】:

    在服务器端,您可以通过向 Admin SDK 使用的服务帐户授予适当的 IAM 权限来配置访问控制:https://cloud.google.com/firestore/docs/security/iam。这不允许在单个集合/文档级别配置权限,例如安全规则。

    我认为您需要在客户端处理用户身份验证 (Firebase Auth) 才能执行您想要执行的操作。然后您可以轻松地使用custom claims 结合安全规则来回答您的问题 1 和 2。

    一种可能的解决方法是在服务器环境中使用客户端 SDK。然后,您可以使用 Admin SDK 为每个用户创建一个自定义令牌,并让该用户登录服务器应用程序本身。

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2018-09-15
      • 2020-04-23
      • 2020-01-06
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多