Firebase Firestore中的用户访问管理

问题描述 投票:0回答:1

我正在努力将我的应用程序移动到基于云的数据库。目前,我已将所有内容存储在sqllite中的用户设备上。

将数据上传到云后,我想允许我的用户将他们的个人数据库访问给另一个人,以便在两个用户之间进行同步。

使用案例:

人1创建一个帐户并开始存储数据。人1想要给人2访问他们的帐户。 Person 2登录并且应用程序确定person 2可以访问person 1的repo,并且两个客户端应用程序变得同步到相同的firestore集合,就像它们登录到同一帐户一样。

构建这个的最佳方法是什么?允许次要用户访问某人的个人文档是很容易的,但是如何以我的客户端应用程序可以轻松确定次要用户可以访问哪些文档的方式执行此操作?我应该维护另一组用户访问映射吗?我该如何构建呢?

android firebase google-cloud-firestore
1个回答
0
投票

那么我能想到的最简单的方法是在您自己的服务器上使用Firebase的Admin SDK来向应该访问该节点的目标用户授予自定义声明。

让我们说吧

UID1 =想要授予访问权限的用户

UID2 =将获得授权以访问其他人节点的用户

在这里,我将给你一个关于写规则的想法,你可以阅读公开或相同或你喜欢

因此,UID1节点的规则可以是(您的结构可以根据您的需要,这是一个示例):

match /users/{UID1}/{allPaths=**}{

    allow write: if request.auth.uid == UID1 || request.auth.token.allowedAccesToId == UID1

}

因此,这是基于默认用户的规则和自定义声明规则的组合

这里的allowedAccesToId是通过admin sdk(JAVA)添加的自定义声明,如下所示:

Map<String, Object> claims = new HashMap<>();
claims.put("allowedAccesToId", UID1);
FirebaseAuth.getInstance().setCustomUserClaimsAsync(UID2, claims).get();

您可以在此处查看如何在其他服务器端语言中执行此操作

https://firebase.google.com/docs/auth/admin/custom-claims

现在,这将授予对UID2用户的访问权限,默认持续时间为1小时,不要认为您可以再自定义自定义令牌的持续时间。

一旦用户想要撤销它,将allowedAccesToId的自定义声明值设置为某个随机值,例如xx,它永远不会匹配任何节点。这样,UID2用户将无法再访问user1的节点

© www.soinside.com 2019 - 2024. All rights reserved.