如何遍历Firebase中的所有节点

时间:2019-04-05 12:18:02

标签: reactjs firebase firebase-realtime-database

我是新手,正在做出反应,目前正在开发应用程序,

背景:

它具有管理员,教职员工,学生,仪表板和一个静态登录页面,其中包含用于/ admin / login,/ faculty / login和/ student / login的按钮。打开相应的仪表板。

问题:

*当我使用学生的登录名登录时,我能够访问所有仪表板,反之亦然,我的Firebase节点中有一个名为role的字段,

*登录时,我检查用户角色,并且不允许其他角色的其他用户登录,但是登录后,我能够访问所有仪表板(不应发生),包括我认为应该使用的仪表板打开,我正在使用react和route.js,即我的公共和私有路由。

enter image description here

我正在尝试使用一个isstudent,isfaculty,isadmin标志来获得角色并限制访问,但无法弄清楚如何遍历所有节点。

任何建议都会有所帮助,谢谢。

ROUTES.js

  const Routes = props => {
              if (props.user) {
                 let isStudent=false;
                 let isFaculty=false;
     let isAdmin=false;
                const uid = props.user.uid;
                const request = firebase
                  .database()
                  .ref(`student/${uid}`)
                  .once("value")
                  .then(snapshot => {
                    if (snapshot.val().role === "student") {
         // isStudent=true
                     console.log(snapshot.val());
                    }
                  });

                firebase
                  .database()
                  .ref(`faculty/${uid}`)
                  .once("value")
                  .then(snapshot => {
                    if (snapshot.val().role === "faculty") {
                      console.log(snapshot.val());
    //isFaculty=true
                    }
                  });

                firebase
                  .database()
                  .ref(`admin/${uid}`)
                  .once("value")
                  .then(snapshot => {
                    if (snapshot.val().role === "admin") {
                      console.log(snapshot.val());
    //isAdmin=true
                    }
                  });
              return (
                <MainLayout>
                  <Switch>
                    <AdminPublicRoute
                      {...props}
                      exact
                      restricted={true}
                      path="/admin/login"
                      component={AdminLogin}
                    />
                 {isAdmin&&<AdminPrivateRoute
                      {...props}
                      path="/admin/admindashboard"
                      exact
                      component={AdminDash}
                    />}
            <FacultyPublicRoute
                      {...props}
                      exact
                      restricted={true}
                      path="/faculty/login"
                      component={FacultyLogin}
                    />
 {isFaculty && <FacultyPrivateRoute
                      {...props}
                      path="/faculty/facultydashboard"
                      exact
                      component={FacultyDash}
                    />}

            <StudentPublicRoute
                      {...props}
                      exact
                      restricted={true}
                      path="/student/login"
                      component={StudentLogin}
                    />
                    {isStudent&& <StudentPrivateRoute
                      {...props}
                      path="/student/studentdashboard"
                      exact
                      component={StudentDash}
                    />}
             </Switch>
                </MainLayout>

1 个答案:

答案 0 :(得分:0)

Nicest-lodash地图:

const roles = _.map(obj.admin, item => item.role)

最简单-Object.keys

const roles = Object.keys(obj.admin).map(key => key.role)