在服务器端调用Firestore时,用户对Cloud Firestore的访问和数据控制

时间:2018-07-25 12:47:37

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

我已经使用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);

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

我已经阅读了有关IAM的文档,但这没有任何意义。 有人可以建议我吗:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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