1

我正在为多家公司开发应用程序。Firebase业务角色

我在如何处理每个公司内的用户角色方面遇到困难。我已经看到了各种其他应用程序的用户角色,但没有一个适合我的场景。

Companies 
- Company A { 
     users { 
     admins { 
      admin1:{} 
     }, 
     staff { 
      staff1:{} 
     }, 
     drivers { 
      driver1:{} 
     } 
     } 
    }, 
- Company B { 
    ... 
    } 

对每一家公司...... - 我想一个公司的管理员创建其他管理员/员工/司机 - 我想一个公司的员工创造其他司机 - 我想司机是最低的,无法创建任何用户

我看不到完成此任务的好方法!任何帮助将不胜感激!

谢谢!

康纳

回答

0

建议flatten and denormalise your data,所以你的数据库结构可能更类似于:

{ 
    "companies": { 
    "company1": { 
     "name": "Company A", 
     "users": { 
     "user1": { 
      "admin": true 
     } 
     } 
    }, 
    "company2": { 
     "name": "Company B", 
     "users": { 
     "user1": { 
      "admin": true 
     }, 
     "user2": { 
      "driver": true 
     } 
     } 
    }, 
    "company3": { ... } 
    }, 

    "users": { 
    "user1": { 
     "companies": { 
     "company1": { 
      "admin": true 
     }, 
     "company2": { 
      "admin": true 
     } 
     } 
    }, 
    "user2": { 
     "companies": { 
     "company2": { 
      "driver": true 
     } 
     } 
    }, 
    "user3": { ... } 
    } 
} 

这种模式被称为denormalization并使用NoSQL数据库时,建议的方法(如火力地堡实时数据库)。这方面的主要缺点是数据重复,但有关处理这些问题的详细信息,请参阅this answer which explains a number of methods(虽然示例使用JavaScript,但前提仍然适用)。

使用此结构可以轻松地将用户与多个公司关联,同时还可以轻松识别哪些用户与每个公司关联,以及他们在该公司内具有何种角色。

+0

感谢您的提示,虽然我发现这在构建我的数据库时非常有帮助,但它并没有解决让管理员为员工和驱动程序等创建帐户的问题...... – Connor

+0

您需要管理员创建帐户的方法为他人?您是指创建Firebase身份验证帐户,还是只需将数据添加到数据库以代表用户? – Grimthorr

+0

工作人员管理驾驶员必须做的事情,但他们也需要能够创建新的驾驶员。驱动程序需要在移动应用程序上进行某种身份验证过程,以便我可以跟踪执行的操作。 – Connor