基于角色的Angular 4路由默认页面

时间:2018-08-13 23:22:16

标签: angular authentication angular2-routing

我的路线定义如下:

const appRoutes: Routes = [
 {
  path: 'teacher',
  component: 'TeacherComponent'
 },
{
  path: 'student',
  loadChildren: './components/student/student.module#StudentModule',
  canLoad: [AuthGuard]
},
{ path: '**',   redirectTo: '/' }
];

我想根据已登录的用户角色来路由默认路由。如果是学生,我想默认设置我的路径:“ **”,将其重定向到“ / student”。同样,对于教师角色,我希望它默认为“ / teacher”。 如何通过根据角色默认路由到不同的URL来实现基于角色的导航?

2 个答案:

答案 0 :(得分:4)

您可以使用路由解析器。

这是我的一个:

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

import { Observable } from 'rxjs/Observable';

import { IMovie } from './movie';
import { MovieService } from './movie.service';

@Injectable()
export class MovieResolver implements Resolve<IMovie> {

    constructor(private movieService: MovieService) { }

    resolve(route: ActivatedRouteSnapshot,
            state: RouterStateSnapshot): Observable<IMovie> {
        const id = route.paramMap.get('id');
        return this.movieService.getMovie(+id);
    }
}

此代码将阻止路线继续,直到检索到电影为止。

您可以执行类似的操作来检索您的角色。然后,您可以使用检索到的数据来激活不同的路由,而不仅仅是返回它,这取决于用户的角色。

答案 1 :(得分:0)

{ path: "", component: LoginViewComponent, pathMatch: "full",canActivate:[AuthGuard] }

    @Injectable()
export class AuthGuard implements CanActivate {
  role: string = "A";

  constructor(private router: Router) {}

  canActivate() {
    const route = this.role === "A" ? "/home" : "/catalog";
    this.router.navigate(['/home']);
    return true;
  }
}