Firebase业务角色

时间:2017-10-20 14:10:32

标签: firebase firebase-realtime-database firebase-authentication firebase-security

我正在为多家公司开发应用程序。

我在如何处理每家公司内部的用户角色方面遇到了障碍。我见过各种其他应用程序的用户角色,但它们都不适合我的场景。

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

对于每家公司......   - 我希望公司的管理员创建其他管理员/员工/司机   - 我希望公司的员工创建其他驱动程序   - 我希望驱动程序最低,无法创建任何用户

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

谢谢!

康纳

1 个答案:

答案 0 :(得分: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数据库(如Firebase实时数据库)时的建议方法。这方面的主要缺点是数据重复,但有关处理此问题的详细信息,请参阅this answer which explains a number of methods(虽然示例是在JavaScript中,但前提仍然适用)。

使用这种结构可以轻松地将用户与多家公司相关联,同时还可以轻松识别哪些用户与每家公司相关联,以及他们在该公司中扮演的角色。