Как сделать ролевую маршрутизацию в Angular? - PullRequest
0 голосов
/ 05 марта 2020

В моем приложении, когда пользователь авторизован, выбрасывает его в / cabinet / news / ..., но нужно перенаправить его на другой URL в зависимости от роли. Я написал распознаватель, но у меня есть ошибка. Uncaught (в обещании): Ошибка: невозможно сопоставить ни один маршрут. Сегмент URL: «admin». Файл app.routing.ts:

    const appRoutes: Routes = [
  { path: '', pathMatch: 'full', redirectTo: 'cabinet' },
  {
    path: 'auth',
    loadChildren: () => import('./modules/auth/auth.module').then(m => m.AuthModule),
  },
  {
    path: 'cabinet',
    loadChildren: () => import('./modules/cabinet/cabinet.module').then(m => m.CabinetModule),
    canLoad: [AuthGuard],
  },
];

Моя кабина inet .routing.ts Файл:

const cabinetRoutes: Routes = [
  { path: '', redirectTo: 'news', pathMatch: 'full' },
  { path: '', component: LayoutComponent, resolve: [CabinetResolver], children: [
      { path: 'news', loadChildren: () => import('./modules/news/news.module').then(m => m.NewsModule) },
      { path: 'analytics', loadChildren: () => import('./modules/analytics/analytics.module').then(m => m.AnalyticsModule) },
      { path: 'declaration', loadChildren: () => import('./modules/declaration/declaration.module').then(m => m.DeclarationModule) },
      { path: 'directory', loadChildren: () => import('./modules/directory/directory.module').then(m => m.DirectoryModule) },
      { path: 'documents', loadChildren: () => import('./modules/documents/documents.module').then(m => m.DocumentsModule) },
      { path: 'reestr', loadChildren: () => import('./modules/reestr/reestr.module').then(m => m.ReestrModule) },
      { path: 'orgInformation', loadChildren: () => import('./modules/org-information/org-info.module').then(m => m.OrgInfoModule) },
      { path: 'dashboard', loadChildren: () => import('./modules/dashboard/dashboard.module').then(m => m.DashboardModule) },
      { path: 'admin', loadChildren: () => import('./modules/admin/admin.module').then(m => m.AdminModule) },
    ],
  },
];

Мой преобразователь:

export class CabinetResolver implements Resolve<any> {

  constructor( private router: Router,
               private authService: AuthService) { }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
    const user: UserModel = this.authService.getUserValue;
    if (user.role == 'ADMIN') {
      this.router.navigate(['/admin']);
      return;
    }
  }
}
...