【问题标题】:Firebase Business RolesFirebase 业务角色
【发布时间】:2017-10-20 14:10:32
【问题描述】:

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

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

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

对于每个公司... - 我希望公司的管理员创建其他管理员/员工/驱动程序 - 我希望公司的员工创建其他驱动程序 - 我希望驱动程序是最低的,不能创建任何用户

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

谢谢!

康纳

【问题讨论】:

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


    【解决方案1】:

    推荐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 中,但前提仍然适用)。

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

    【讨论】:

    • 感谢您的提示,虽然我发现这对构建数据库非常有帮助,但它并不能解决管理员为员工和司机等创建帐户的问题...
    • 管理员需要什么方法为别人创建账号?您是指创建 Firebase 身份验证帐户还是简单地将数据添加到数据库以代表用户?
    • 工作人员管理驱动程序必须执行的操作,但他们还需要能够创建新驱动程序。驱动程序需要在移动应用程序上进行某种身份验证过程,以便我可以跟踪所做的事情。
    • 您可以使用Firebase Authentication 包来管理身份验证和帐户。对于不同的权限或角色,这取决于您管理,因为没有任何内置功能,但使用上述数据库是存储用户配置文件数据和角色的好方法,因此您可以以此为基础。另请参阅this answer,它使用此方法来识别用户拥有的角色,然后根据允许他们执行的操作采取不同的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2020-11-16
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多