Угловая 6-ролевая маршрутизация на корневой URL - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь реализовать маршрутизацию на основе ролей для моего корневого URL.Например, когда пользователь вошел в систему, я могу перенаправить его на страницу панели пользователя с сайта login.component.То же самое относится и к админке, также перенаправляется на страницу панели администратора через логин.Но как перенаправить на конкретную панель мониторинга с помощью роли, если пользователь открывает корневой URL-адрес?

В настоящее время мой корневой маршрут указывает на компонент панели мониторинга, который анализирует роли и перенаправляет на нужную страницу панели мониторинга, пользователя или администратора.Есть ли способ устранить компонент панели мониторинга?

AppRouting.ts

export const AppRoutes: Routes = [

    {
        path: '',
        redirectTo: 'dashboard',
        pathMatch: 'full'
    },  

{
        path: '',
        component: AdminLayoutComponent,
        canActivate: [AuthGuard],
        canLoad: [AuthGuard],
        children: [
            {
                path: 'dashboard',
                loadChildren: './dashboard/dashboard.module#DashboardModule'
            },  

DashboardRouting.ts

export const DashboardRoutes: Routes = [

    {
        path: '',
        component: DashboardRedirectComponent,
    },

Проверка компонента DashboardRedirect:

export class DashboardRedirectComponent implements OnInit, AfterViewInit {

    constructor(private auth: AuthenticationService, private router: Router) {

        let currentUser = JSON.parse(localStorage.getItem('currentUser'));

        if (this.auth.loggedIn()) {

            if (currentUser['role'] == 'User') {
                this.router.navigate(['/dashboard/user']);
            }

            if (currentUser['role'] == 'Admin') {
                this.router.navigate(['/dashboard/admin']);
            }
        }
    }

Я пытался реализовать это, используя охрану и даже распознаватель, но это не сработало.Когда я открываю корневую страницу своего приложения, оно переходит на панель мониторинга и через несколько секунд переходит на соответствующую страницу панели инструментов, но я бы хотел сразу перейти к пользователю и без дополнительного компонента для этого.Любое предложение?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вам необходимо создать имя Guard в виде RedirectGuard следующим образом:

import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';

@Injectable()
export class RedirectGuard implements CanActivate {
 let currentUser = null;
 let auth = null;

    constructor(private authenticationService: AuthenticationService) {
      this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
      this.auth =  authenticationService;
     }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
      //Your redirection logic goes here

      if (this.auth.loggedIn()) {

        if (currentUser['role'] == 'User') {
            this.router.navigate(['/dashboard/user']);
        }

        if (currentUser['role'] == 'Admin') {
            this.router.navigate(['/dashboard/admin']);
        }
    }
   return false;

    }
}

Использовать RedirectGuard Внутри AppRouting.ts следующим образом:

path: '',
        component: AdminLayoutComponent,
        canActivate: [RedirectGuard],
        canLoad: [AuthGuard],
        children: [
            {
                path: 'dashboard',
                loadChildren: './dashboard/dashboard.module#DashboardModule'
            }, 
0 голосов
/ 28 января 2019

Если вы хотите пропустить текущую маршрутизацию, вам нужно вернуть false от вашей охраны.В вашем перенаправлении на основе ролей сначала проверьте, действительно ли пользователь выполняет маршрутизацию на ваш базовый компонент /dashboard, а не на конкретный маршрут /dashboard/admin, иначе вы бы перехватили маршрутизацию на основе ролей.Затем проверьте роли и, когда вы хотите перенаправить, верните false, чтобы пропустить фактическую маршрутизацию.

Например:

 canActivate (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {

    const roles = this.permissionsService.getPermissions();

    switch (true) {
      case state.url !== '/home': {
        return true;
      }
      case !!roles['admin']: {
        this.router.navigate(['home', 'admin']);
        return false;
      }
      case !!roles['user']: {
        this.router.navigate(['home', 'user']);
        return false;
      }
      default: return true;
    }

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