2017-11-17 10 views
0

예 : www.example.com/dashboard
사용자가 Customer인지 감지하고, CustomerDashboardModule을로드하고, 사용자가 Staff이면 StaffDashboardModule, 사용자가 관리자 인 경우, 그것은 AdminDashboardModule입니다하지만 URL은/대시 보드 여전히Angular2 - 지정한 모듈을로드하지만 동일한 경로 URL을 사용하는 loadChildren

예제 코드입니다 :

export const routes: Routes = [ 
{ 
    path: '', 
    component: DashboardComponent, 
    children: [ 
     { 
      path: '', 
      loadChildren: condition ? 'x' : 'y' 
     } 
    ] 
}]; 

그러나이 작동하지 않습니다.

두 번째 문제는
사용자를 검색하는 방법은 무엇입니까? CoreModule의 서비스를 호출하십시오. 해결책은 CoreModule에 정적 속성 Injector를 만들고 생성자에 Injector를 삽입하는 것이지만 좋은 연습인지 여부는 알 수 없습니다.

답변

0

가드 경로를 사용할 수있는 경우에만 URL을 탐색 할 수 있으며 그렇지 않은 경우 다른 URL로 리디렉션 할 수 있습니다. ,

@Injectable() 
export class AdminAuthGuard implements CanActivate { 

auth: any = {}; 

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

canActivate() { 
    if (/*user has privileges check*/) { 
     this.router.navigate(['/adminDashboard']); 
     return true; 
    } 
    else { 
     this.router.navigate(['/userDashboard']); 
    } 
    return false; 
    } 
} 

두 번째 문제에 대한 로그인 한 사용자 감지 로그인을 사용 리디렉션과

const routes: Routes = [ 
    { 
    path: 'adminDashboard', 
    component: AdminComponent, 
    canActivate: [AdminAuthGuard], 
    children: [ 
     { 
     path: '', 
     children: [ 
      { path: '', component: AdminDashboardComponent } 
     ], 
     } 
    ] 
    }, 
    { 
    path: 'userDashboard', 
    component: UserComponent, 
    canActivate: [UserAuthGuard], 
    children: [ 
     { 
     path: '', 
     children: [ 
      { path: '', component: UserDashboardComponent } 
     ], 
     } 
    ] 
    }, 
]; 

가드 예 :

Angular Router goto 'Milestone 5: Route guards'

예 라우터 설정에서 가드를 정의 논리를 로그인 핸들 용 서비스에두고 다른 서비스를 사용하여 백엔드에서 구성한 사용자 권한을 확인하십시오. 응용 프로그램이 인터넷을 통해 https를 사용하여 사용자 자격 증명을 안전하게 보내면됩니다.

+0

답장을 보내 주셔서 감사합니다. 문제는 동일한 URL을 유지하지만 사용자 유형에 따라 다른 모듈을로드하려고합니다. –