programing

활성화 가능 여부구성 요소가 없는 경로로 자식을 활성화할 수 있음

instargram 2023. 7. 26. 21:35
반응형

활성화 가능 여부구성 요소가 없는 경로로 자식을 활성화할 수 있음

경로 경비대에 대한 각진 2 문서는 언제 사용하는 것이 적절한지에 대해 명확하지 않게 만들었습니다.CanActivate대 a 비대대a.CanActivateChild구성 요소가 없는 경로와 결합된 가드.

TL;DR: 가지고 있는 이유가 무엇입니까?canActivateChild가 없는 를 구성용는경사수있경우할를로없는소요와 함께 할 수 .canActivate같은 효과를 얻기 위해?

긴 버전:

라우팅 계층의 모든 수준에서 여러 개의 가드를 사용할 수 있습니다.라우터는 가장 깊은 하위 경로에서 맨 위까지 먼저 CanDeactivate 및 CanActivateChild 가드를 확인합니다.그런 다음 CanActivate 가드를 위쪽에서 아래쪽으로 가장 깊은 하위 경로까지 확인합니다.

난 그걸 이해해.CanActivateChild아래쪽에서 확인하고 있습니다.CanActivate위에서 아래로 선택됩니다.수 없는 입니다: 제가이해수없것문다제예음입다니시된서에은는할▁given▁what다.

@NgModule({    
  imports: [
    RouterModule.forChild([
      {
        path: 'admin',
        component: AdminComponent,
        canActivate: [AuthGuard],
        children: [
          {
            path: '',
            canActivateChild: [AuthGuard],
            children: [
              { path: 'crises', component: ManageCrisesComponent },
              { path: 'heroes', component: ManageHeroesComponent },
              { path: '', component: AdminDashboardComponent }
            ]
          }
        ]
      }
    ])
  ],
  exports: [
    RouterModule
  ]
})
export class AdminRoutingModule {}

그래서 그admin에 구성 가 없는 경로가 .

관리 구성 요소 아래의 자식 경로를 보면 경로와 자식 속성이 있는 경로가 있지만 구성 요소를 사용하지 않습니다.구성 요소가 없는 경로를 사용할 수 있기 때문에 구성에 실수가 없습니다.

왜 이 경우의 코드는 다음을 삽입합니까?AuthGuard 및 구성 하 및 경구요성소루트로(위))admin않을까요? )? 뿌부터지충 않지분을요까하키면리?▁)않요?

샘플을 기반으로 다음을 제거하는 플런크를 만들었습니다.canActivateChild: [AuthGuard] 버합 다튼▁the ▁on▁and ▁a다 ▁adds outAdminDashboard 다를까, 아나다까를그니, 그▁sure▁the.canActivate모항로는 여전히 경비를 서고, 그래서 가지고 있는 것이 무슨 의미가 있습니까?canActivateChild가 없는 를 구성용는경사수있할경우로를없는소요가와 함께 사용할 수 .canActivate?

문서에서:

CanActivate를 사용하여 경로를 보호하는 방법에 대해 알아보았듯이 CanActivateChild Guard를 사용하여 하위 경로를 보호할 수도 있습니다.CanActivateChild 가드는 CanActivate 가드와 유사하게 작동하지만 각 자식 경로가 활성화되기 전에 실행된다는 점이 다릅니다.관리 기능 모듈을 무단 액세스로부터 보호했지만 기능 모듈 내의 하위 경로도 보호할 수 있었습니다.

다음은 실질적인 예입니다.

  1. 로 이동하기./admin
  2. canActivate
  3. 의자들사탐다니색합이를식▁▁the▁between의 아이들 사이를 합니다./admin 경로, 그나러나canActivate를 보호하기 ./admin
  4. canActivateChild정의된 경로의 자식 간에 변경될 때마다 호출됩니다.

이것이 여전히 불분명하다면 가드 디버깅을 추가하여 특정 기능을 확인하는 데 도움이 되기를 바랍니다.

현실 세계에서, 저는 부모와 모든 아이들을 위해 같은 경비원을 사용하는 것이 불필요하다고 생각합니다.

더 나은 예로, 관리 사용자(편집/보기)에 대한 역할이 있다고 가정하면 "편집" 탭에만 대한 가드를 추가할 수 있습니다.

    RouterModule.forChild([
      {
        path: 'admin',
        component: AdminComponent,
        canActivate: [AuthGuard],  //1 - redirect to login page if not logged in
        children: [
          //View Access
          {
            ......
          },
          //Edit Access
          {
            path: '',
            canActivateChild: [EditGuard], //2 - display "you don't have Edit permission to access this page"
            children: [
              { path: 'crises', component: ManageCrisesComponent },
              { path: 'heroes', component: ManageHeroesComponent },
              { path: '', component: AdminDashboardComponent }
            ]
          }
        ]
      }
    ])

또한 routeGuard에 대한 angular2의 문서를 혼동했습니다. 두 문서의 차이점은 무엇입니까?CanActivate경비원과CanActivateChild보초를 서다

몇 가지 결과가 있습니다.이것이 당신에게 도움이 되기를 바랍니다.

에서auth-guard.service.ts파일

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;

return this.checkLogin(url);
}

canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return this.canActivate(route, state);
}

왜냐하면canActivate메서드는 에서 호출됩니다.canActivateChild기능.당신은 호출하지 않는 코드 조각을 작성할 수 있습니다.canActivate의 방법canActivateChild기능.

제가 생각할 수 있는 한 가지 이유는 타임아웃입니다.

저는 Angular 2에서 인증 공급자를 사용하여 작업하기 시작했습니다.이 공급자는 일정 시간 이상 유휴 상태였던 세션을 만료합니다.

컴퓨터를 로그인한 상태로 두고 세션이 만료되는 일반적인 상황에서는 다음에 시도하는 탐색을 통해 현재 상황을 확인해야 합니다.만약 당신이 어린이 경로 사이를 항해하고 있다면, 나는 생각합니다.CanActivateChild만료된 세션을 감지하고 로그인하도록 리디렉션을 트리거하는 가드입니다.CanActivate전혀 작동하지 않습니다.

고지 사항:이것은 제 머리에서 나온 것입니다, 저는 아직 그것을 실행하지 않았습니다.

정의된 자녀가 10명이면 어떨까요?

그리고나서canActivateChild10개가 아니라 모두 공통 요구 사항이 있는 경우 한 곳에만 가면 됩니다.canActivate각 아이들에게

TL;DR: CanActivate그리고.CanActivateChild구성 요소가 없는 경로용이 아닙니다.

저는 문서의 특정 마일스톤에서 구성요소가 없는 경로와 다른 경로에서 두 경비원의 사용을 단순히 보여주기 위한 의도였기 때문에 문서가 단순히 구성요소가 없는 경로에서 두 경비원의 필요성을 간과했다고 생각합니다.

두 가드를 모두 사용하면 다음과 같은 특정 시나리오에서 매우 유용할 수 있습니다.메일, 기록 통계, 리소스 사용 등과 같은 몇 가지 구성요소를 볼 수 있는 로그인을 허용하는 관리 대시보드 - 이 수준에서 액세스는 다음과 같이 제한됩니다.CanActivateguard - 각 구성 요소로 이동하려고 할 때 각 관리자 사용자의 역할이 검사됩니다.CanActivateChild보초를 서다

언급URL : https://stackoverflow.com/questions/40163348/canactivate-vs-canactivatechild-with-component-less-routes

반응형