2017-11-17 4 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' 
     } 
    ] 
}]; 

しかし、それは動作しません。

第2の問題は
ユーザーを検出する方法ですか? CoreModuleのサービスを呼び出します。解決策は、CoreModuleに静的プロパティInjectorを作成し、そのコンストラクタにInjectorを注入することですが、それが良い方法であるかどうかわかりません。

答えて

0

Guardを使用すると、ルートにアクセスできる場合のみURLに移動できます。そうでない場合は別のURLにリダイレクトできます。

Angular Router goto 'Milestone 5: Route guards'

例ルータの設定でガードを定義します。リダイレクトと

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 } 
     ], 
     } 
    ] 
    }, 
]; 

ガード例:

@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; 
    } 
} 

あなたの第二の問題について、ログインしているユーザーを検出するためにログインを使用ロジックをログインハンドル用のサービスに入れ、別のサービスを使用してバックエンドで設定したユーザー権限をチェックします。アプリケーションがインターネットを経由する場合は、httpsを使用してユーザーの資格情報を保護します。

+0

ご回答ありがとうございます。問題は同じURLを保持したいのですが、ユーザータイプに応じて別のモジュールをロードすることです –

関連する問題