如何在登录时区分用户类型?

时间:2017-05-09 18:07:11

标签: javascript html database firebase firebase-realtime-database

我正在构建一个具有不同类型用户的应用,这些用户必须能够根据自己的身份访问不同的信息中心。与学生,老师和学校主任相似。 每个都有单独的仪表板,他们必须在认证时指向它们。

我使用firebase作为我的后端支持。在将它们验证到firebase之后,我将它们保存到各自的DB中,如下所示。

问题是因为firebase将它们全部视为用户并为身份验证中的每个人分配一个UID,当他们重新登录时,知道谁是学生,教师或导演的最佳方式是什么,以便他们可以被定向到他们各自的仪表板。

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要为您的应用程序使用基于角色的身份验证系统。 根据这些用户角色,您可以将用户重定向到其特定仪表板或分配权限。

对于Firebase,基于角色的数据库应该如下所示:

  {
    "roles" : {
      "teacher" : true,
      "student" : true,
      "director" : {
        "335Fq6U6gZPWNEyDJRZd6ZYGkvn1" : true
      }
   },
    "secret_data" : {
     "access_code" : 390399333,
     "users" : {
       "335Fq6U6gZPWNEyDJRZd6ZYGkvn1" : true
     }
   },
   "users" : {
     "335Fq6U6gZPWNEyDJRZd6ZYGkvn1" : {
       "username" : "shakti"
     }
   }
 }

并且安全角色应该是这样的:

  {
    "rules" : {
      ".read"  : false,
      ".write" : false,

      // Secret data is only available to paid users.
      "secret_data" : {
        ".read": "(root.child('roles').child('director').hasChild(auth.uid)) 
                  && (data.child('users').hasChild(auth.uid))",
       "users" : {
         "$uid" : {
           ".read" : "($uid === auth.uid)"
         }
       }
     }
   }
 }

请参阅:https://firebase.google.com/docs/database/security/user-security

和github:https://gist.github.com/sararob/331760829a9dcb4be3e7

您也可以参考Firebase: set security rules depending on user roles

上的SO答案