0

Ich versuche, geschützte Routen wie diese zu haben: 1). loggedin user group routes 2.) admin routes, 3.) student routes, 4.) public routes. Die LoggedInUser funktioniert wie erwartet, aber die 2 anderen Routen - schooladmin und funktioniert nicht wie benötigt. Nach dem Einloggen als Admin oder als Student, sollte die jeweilige Benutzerin in der Lage sein, zu den erlaubten URLs zu gehen, aber immer, wenn ein Schuladministrator zum Beispiel http://localhost/students anmeldet, wird er automatisch zurück zum Dashboard weitergeleitet für Schüler. Was soll ich richtig machen? Vielen Dank.FlowRouter standardmäßig auf die Zielseite

Diese Routengruppe erlaubt nur angemeldete Benutzer.

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('/'); 
    } 
    }] 
}); 

dies ist der Weg Gruppe für die Schule admins

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'); 
    } 
    }] 
}); 

dies die Route

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'); 
    } 
    }] 
}); 

Beispielrouten die Gruppen für Studenten ist an gebunden sind für die Schule admins Diese Probe Route ist nur zum Zugriff

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

dieser Weg ist für Schüler

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

Antwort

0

Das Paket tatsächlich auf einem Abonnement hängt Rollen zuzugreifen, was bedeutet, dass, wenn das Abonnement nicht bereit ist, die Roles.userIsInRole Methode immer false zurück. Und dann schlägt deine Route fehl, denn FlowRouter läuft immer, egal was passiert. Dies geschieht in ganz bestimmten Fällen, aber es passiert und Ihre Benutzer werden es bemerken.

Zum Glück gibt es jetzt eine Lösung. Wir können die volle Kontrolle darüber haben, wann FlowRouter initialisiert wird.

Es gibt 2 Möglichkeiten, dies zu erreichen.

  1. Direkt oberhalb der FlowRouter-Deklaration verwenden Sie die Methode Accounts.onLogin(function(user){});, um die Rolle zu überprüfen und dann umzuleiten. (Check user._id für Rollen)

  2. Klicken Sie hier für die zweite Lösung https://medium.com/@satyavh/using-flow-router-for-authentication-ba7bb2644f42