Несколько маршрутов / маршрутов панели инструментов для разных ролей с AuthGuard - PullRequest
0 голосов
/ 05 марта 2019

Я хочу, чтобы моя домашняя страница загружала разные модули для разных ролей

const routes: Routes = [
      {
        path: 'login',
        component: LoginComponent,
      },
      { path: '', loadChildren: './dashboard/dashboard.module#DashboardModule', canLoad: [AuthGuard], canActivate: [AuthGuard], },
      {
        path: '',
        loadChildren: './dashboard/dashboard.module#DashboardModule',
        canActivate: [true]
      },
]

AuthGuard здесь

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean> | Promise<boolean> | boolean {
    if (localStorage.getItem('ISTRAINER') === Role.Trainer
    && next.routeConfig.loadChildren === './dashboard/dashboard.module#DashboardModule') {
      return true;
    }
    return false;
  }
  canLoad(route: Route): boolean {
    return false;
  }

когда canLoad: [AuthGuard] возвращает false, маршрутизатор не проверяет следующий маршрут

или есть способ изменить loadChildren в зависимости от маршрута

на самом деле я хочу добиться того, чтобы при входе в систему, скажем, на маршруте "Панель инструментов" или на "" Модуль студента загружается, если роль студента регистрируется на маршруте«Панель инструментов» или «» «Модуль тренера загружается, если роль тренера вошла на маршрут« Панель инструментов », или« »Модуль администратора загружается, если роль администратора регистрируется

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

вы можете использовать url matcher от angular https://angular.io/api/router/UrlMatcher

import { trainerMatcher } from './trainerMatcher'
import { studentMatcher } from './studentMatcher'
{
 path : '',
 matcher : trainerMatcher,
 loadChildren : 'trainerModule',
 canLoad : [AuthGuard]
},
{
 path : '',
 matcher : studentMatcher,
 loadChildren : 'studentModule'
}

Таким образом, вы можете написать matcher и проверить там правильную роль.Если вы все еще хотите убедиться, что модуль не может быть загружен, вы можете установить защиту в конце концов.

У меня возникла эта проблема, и я нашел эту статью полезной: https://medium.com/@lenseg1/loading-different-angular-modules-or-components-on-routes-with-same-path-2bb9ba4b6566

0 голосов
/ 05 марта 2019

это ожидаемое поведение, когда путь соответствует, и angular думает, что это маршрут, который вы просили.В вашем случае кажется, что единственный возможный вариант - обновить конфигурацию маршрута при изменении роли.см. router.resetConfig документы.

...