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

How to create different user groups in Firebase?

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

我希望此应用程序跟踪库存商品,允许用户使用条形码搜索库存、扫描库存、添加或查找库存。库存物品将存储在用户 'store'.

我想要三种类型的用户:

  1. 管理员用户,他创建了商店并拥有商店的完全访问权限。他可以管理所有 'employee users',例如删除他们的访问权限和员工用户必须由他邀请才能使用唯一代码加入他的商店。他将拥有 'employee users' 没有的特殊能力,例如添加和编辑库存的能力。
    经理帐户是什么样的

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

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

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

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

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

如果您的应用将其数据存储在其中一个 Firebase 数据库产品中 (Realtime Database, or Cloud Firestore), or if it stores files in Cloud Storage through Firebase,那么您可能希望将每个用户的角色存储为该用户个人资料中的自定义声明。

Firebase Authentication documentation shows how to set such custom claims,例如如何从 Node.js 脚本将用户的 admin 属性 设置为 true

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);
});

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

在客户端代码中,您可以 decode the user's token to get access to the same claims 并为他们优化 UI

Frank 的回答是正确的,但我想添加一条非常简单的附加信息。如果您将用户信息(出生日期、昵称等)存储在 /users 节点中(正如许多 Firebase 应用所做的那样),只需在该节点中添加角色

users
  uid_0
    name: "Larry"
    role: "manager"
  uid_1
    name: "Curley"
    role: "employee"
  uid_2
    name: "Moe"
    role: "shopper"

当用户登录时,从用户节点读取他们的节点,然后应用程序将知道他们是哪种类型的用户并显示适当的 UI。

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