3

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

我可以像使用 Cloud Firestore 安全规则一样使用谷歌云 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 操作?

4

1 回答 1

3

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

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

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

于 2018-07-25T17:07:40.990 回答