7

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

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

我想拥有三种类型的用户:

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

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

  3. 只能查看商店和商店中商品的 购物者用户。购物者用户帐户的外观 购物者用户帐户的外观

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

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

4

2 回答 2

12

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

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

Firebase 身份验证文档展示了如何设置此类自定义声明,例如如何将用户的属性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);
});

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

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

于 2018-01-15T00:59:42.297 回答
4

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

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

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

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

于 2018-01-15T21:44:14.783 回答