Ленивая загрузка модулей по тому же пути в зависимости от роли - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь загрузить угловой модуль в зависимости от моей роли (когда я вошел в систему). Я попробовал это с Angular Guard, но это не работает, когда он терпит неудачу, он не идет к следующему маршруту.

const routes: Routes = [
   {
      path: '',
      loadChildren: () => AuthModule
      // Load when not logged in
   },

   {
      path: '',
      loadChildren: () => AdminModule
      // Load when admin
   },

   {
      path: '',
      loadChildren: () => CrewModule
      // Load when crew
   }
];

Есть идеи как это исправить? Я думаю, что Angular Guard или использование мэтчера не является правильным решением для этого ...

Редактировать: для каждого пути / модуля у меня есть свой охранник, похожий на следующий:

import { Injectable } from '@angular/core';
import { CanLoad, CanActivate, Route, Router } from '@angular/router';
import { AuthService } from '@app/core';

@Injectable()
export class AdminModuleGuard implements CanLoad {
   constructor(private authService: AuthService, private router: Router) {}

   canLoad(route: Route): boolean {
      const url: string = route.path;
      console.log('Admin Module Load Guard - Url:' + url);
      return false;
   }
}

Спасибо!

Добрые ребренды, Яник

1 Ответ

0 голосов
/ 19 ноября 2018

Что ж, я больше думал об этом:

Определены разные маршруты для разных типов ролей пользователей:

const routes: Routes = [
  { path: '/login', loadChildren: './auth/auth.module#AuthModule' },
  { path: '/admin', loadChildren: './admin/admin.module#AdminModule' },
  { path: '/crew', loadChildren: './crew/crew.module#CrewModule' }
];

А затем в вашей логике охраны:

import { Injectable } from '@angular/core';
import { CanLoad, CanActivate, Route, Router } from '@angular/router';
import { AuthService } from './authentication/services/auth.service';

@Injectable()
export class AuthGuardService implements CanLoad {
  constructor(
    private authService: AuthService,
    private router: Router
  ) {}

  canLoad(route: Route): boolean {
    let url: string = route.path;
    switch(url) {
      case '/login': {
        if(this.authService.isUserLoggedIn()) {
          this.authService.userRole === 'ADMIN' ? this.router.navigate(['/admin']) : this.router.navigate(['/crew']);
          return false;
        } else {
          return true;
        }
        break;
      }
      case '/admin': {
        if(this.authService.isUserLoggedIn()) {
          if(this.authService.userRole === 'ADMIN') {
            this.router.navigate(['/admin']);
            return true;
          } else {
            this.router.navigate(['/crew']);
            return false;
          }
        } else {
          this.router.navigate(['/login']);
          return false;
        }
        break;
      }
      case '/crew': {
        if(this.authService.isUserLoggedIn()) {
          if(this.authService.userRole === 'ADMIN') {
            this.router.navigate(['/admin']);
            return false;
          } else {
            this.router.navigate(['/crew']);
            return true;
          }
        } else {
          this.router.navigate(['/login']);
          return false;
        }
        break;
      }
      default: {
        this.router.navigate(['/login']);
        return false;
        break;
      }
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...