@Ghoulll

Как реализовать ролевую модель в Angular?

Как корректно реализовать роуты в зависимости от роли? На данный момент, универсальная страница это новости куда попадают все авторизованные пользователи, но пользователи с определенной ролью должны попадать в другой раздел.
cabinet.routing.ts file:
const cabinetRoutes: Routes = [
  { path: '', redirectTo: 'news', pathMatch: 'full' },
  { path: '', component: LayoutComponent, 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) },
    ],
  },
];

авторизованного пользователя перекидывает в cabinet
auth.service.ts file:
...
          this.authService.sendSignedPhraseToServer(this.signedCert).subscribe( responseWithJWT => {
            localStorage.setItem('someKey', responseWithJWT.token);
            this.user = this.authService.getToken;
            this.user = jwt_decode(this.user);
            this.router.navigate(['/cabinet']);
          });


app-routing module:
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],
  },
];
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер

Как написать роутинг, чтобы при .....


"Роутинг" это связь между роутом и соответсвующим компонентом.
.... чтобы при авторизации был редирект на разные страницы?


Вот при авторизации и navigate куда нужно.

Если вы хотите чтобы cabinet был универсальным маршрутом и при этом лейзилоад, то лейзи придется делать вложенные в него, т.е. дополнительные суброуты. Сам список роутов не предусматривает никакую логику.
Но логику можно поместить в гвард или резолвер. Это ж фактически middleware в роутере.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы