如何在 Firebase 中创建不同的用户组?

Sam*_*Sam 6 ios multiple-users firebase firebase-authentication

我正在使用 Xcode 制作销售点应用程序。

我希望这个应用程序能够跟踪库存项目,允许用户使用条形码搜索库存、扫描库存、添加或查找库存。库存物品将存储在用户的“商店”中。

我想要三种类型的用户:

  1. 经理用户,他创建了一个商店并拥有对该商店的完全访问权限。他可以管理所有“员工用户”,例如删除他们的访问权限,员工用户必须由他使用唯一代码邀请才能加入他的商店。他将拥有“员工用户”所没有的特定能力,例如添加和编辑库存的能力。
    经理帐户的样子 在此处输入图片说明

  2. 有限制的员工用户。(例如,看不到编辑用户页面,也看不到编辑经理用户拥有的股票的选项)。
    员工帐户的样子 员工帐户的样子

  3. 只能看到商店和商店中商品的购物者用户购物者用户帐户的样子 购物者用户帐户的样子

附加的 UI 设计应该显示我的意思。如您所见,经理用户有一个管理员工选项卡,我希望只有他可以拥有而其他用户没有。在查看库存时,经理还可以选择了解更多详细信息,而员工用户则没有。购物者帐户只能访问两个功能,查找商店和检查商店中的库存。

所以我的问题是, 如何在 Firebase 中为我的应用编写三种不同类型的用户? & 如何在向其他用户显示其他选项的同时只向他们显示我想向他们显示的选项?

Fra*_*len 11

这是一个非常广泛的主题,其中很大一部分取决于您如何实现应用程序的各个部分。以下是众多可能的答案之一,只是为了让您开始使用一些链接。

如果您的应用将其数据存储在 Firebase 数据库产品之一(Realtime DatabaseCloud Firestore)中,或者如果它通过 Firebase将文件存储在Cloud Storage 中,那么您可能希望将每个用户的角色存储为自定义声明该用户的个人资料。

火力地堡认证文档展示了如何设定自定义声明,例如如何将设置admin用户的属性true从Node.js的脚本:

admin.auth().getUserByEmail('user@admin.example.com').then((user) => {
  // Confirm user is verified.
  if (user.emailVerified) {
    // Add custom claims for additional privileges.
    // This will be picked up by the user on token refresh or next sign in on new device.
    return admin.auth().setCustomUserClaims(user.uid, {
      admin: true
    });
  }
}).catch((error) => {
  console.log(error);
});
Run Code Online (Sandbox Code Playgroud)

同样,您可以在role属性中设置您的用户角色。然后,您可以检查实时数据库Cloud FirestoreCloud Storage的服务器端安全规则,如果用户具有允许他们访问他们尝试访问的特定数据的角色。

在客户端代码中,您可以解码用户的令牌以访问相同的声明并为它们优化 UI


Jay*_*Jay 5

弗兰克的答案是正确的,但我想添加一条非常简单的附加信息。如果您将用户信息(DOB、昵称等)存储在 /users 节点中(正如许多 Firebase 应用程序所做的那样),只需在该节点中添加角色即可

users
  uid_0
    name: "Larry"
    role: "manager"
  uid_1
    name: "Curley"
    role: "employee"
  uid_2
    name: "Moe"
    role: "shopper"
Run Code Online (Sandbox Code Playgroud)

当用户登录时,从用户节点读取他们的节点,应用程序就会知道他们是什么类型的用户并显示适当的 UI。

您还可以在 Firebase 规则中利用它来控制每个角色可以访问的内容。

  • @MatthewMullin 我想说,直到最近,我的解决方案一直是一种更常见的做法,而且更简单、更容易实现,因为它不需要任何云功能。它也可以 100% 快速完成,因为它不需要 Admin SDK。有人可能会说,利用 Admin SDK 的令牌机制“较少”占用资源。但是,它不应该存储任何其他数据 - 因此无论如何都可能会使用具有其他用户属性的 /uses 节点。我鼓励您调查弗兰克斯的答案,因为总体而言这可能是最好的方法。 (2认同)
  • 澄清一下——在云函数和 Admin SDK 出现之前,我的答案实际上是“唯一”的答案。因此,正如 @frankvanpuffelen 指出的那样,现在有多种选项可以在 Firebase 应用中处理不同类型的用户。 (2认同)