我是新手,正在做出反应,目前正在开发应用程序,
背景:
它具有管理员,教职员工,学生,仪表板和一个静态登录页面,其中包含用于/ admin / login,/ faculty / login和/ student / login的按钮。打开相应的仪表板。
问题:
*当我使用学生的登录名登录时,我能够访问所有仪表板,反之亦然,我的Firebase节点中有一个名为role的字段,
*登录时,我检查用户角色,并且不允许其他角色的其他用户登录,但是登录后,我能够访问所有仪表板(不应发生),包括我认为应该使用的仪表板打开,我正在使用react和route.js,即我的公共和私有路由。
我正在尝试使用一个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>
答案 0 :(得分:0)
Nicest-lodash地图:
const roles = _.map(obj.admin, item => item.role)
最简单-Object.keys
const roles = Object.keys(obj.admin).map(key => key.role)