2017-09-22 137 views
0

我想要保護像這樣的路線:1). loggedin user group routes 2.) admin routes, 3.) student routes, 4.) public routesLoggedInUser按預期工作,但其他兩種路線 - schooladminstudents不按需要工作。以管理員或學生身份登錄後,根據預期,各個用戶應該能夠訪問允許的URL,但無論何時,例如,如果學生管理員轉到http://localhost/students,它會自動重定向回儀表板,並且同樣爲學生。我要做的是對的?謝謝。FlowRouter默認重定向到着陸頁

此路線組僅允許登錄的用戶。

var LoggedInUser = FlowRouter.group({ 
    name: 'currentUser', triggersEnter: [function (context, redirect) { 
    if (Meteor.loggingIn() || Meteor.userId()) { 
     FlowRouter.watchPathChange(); 
     let currentRoute = FlowRouter.current(); 
     if (!currentRoute.path) { 
     FlowRouter.go('/dashboard'); 
     } else { 
     FlowRouter.go(currentRoute.path); 
     } 

    } else { 
     redirect('/'); 
    } 
    }] 
}); 

這是學校管理員路由組

var schooladmin = LoggedInUser.group({ 
    name: 'schooladmins', triggersEnter: [function (context, redirect) { 
    FlowRouter.watchPathChange(); 
    let currentRoute = FlowRouter.current(); 
    if (Roles.userIsInRole(Meteor.userId(), ['super-admin', 'admin'])) { 
     console.log(currentRoute.path); 
     FlowRouter.go(currentRoute.path); 
    } else { 
     redirect('dashboard'); 
    } 
    }] 
}); 

這是爲學生的路線

var students = LoggedInUser.group({ 
    name: 'students', triggersEnter:[function (context, redirect) { 
    FlowRouter.watchPathChange(); 
    let currentRoute = FlowRouter.current(); 
    if (Roles.userIsInRole(Meteor.userId(), ['manage-team', 'student-page'])) { 
     FlowRouter.go(currentRoute.path); 
    } else { 
     redirect('dashboard'); 
    } 
    }] 
}); 

樣品路由組連接到 這樣的路由是學校管理員僅限訪問

schooladmin.route('/students', { 
    name: 'students', action(){ 
    BlazeLayout.render('formrender', {formrend: 'student'}); 
    } 
}); 

這條路線是學生訪問

students.route('/student/dashboard', { 
    name: 'students-dashboard', action(){ 
    BlazeLayout.render('studentlayout', {studentrender: 'studentdashboard'}); 
    } 
}); 

回答

0

的角色包實際上依賴於訂閱,這意味着如果訂閱是沒有準備好Roles.userIsInRole方法將總是返回false。然後你的路線失敗,因爲無論如何FlowRouter總是運​​行。這發生在非常特殊的情況下,但它發生並且您的用戶會注意到。

幸運的是,現在有一個修復。我們可以完全控制FlowRouter初始化的時間。

有兩種方法可以實現這一點。

  1. 只是在FlowRouter聲明之上使用Accounts.onLogin(function(user){});方法來檢查角色然後重定向。這裏(檢查user._id的角色)

  2. 點擊查看第二個解決方案https://medium.com/@satyavh/using-flow-router-for-authentication-ba7bb2644f42