CanLoad Guard предотвращает загрузку загруженного модуля ленивых. Обычно мы используем эту защиту, когда мы не хотим, чтобы неавторизованный пользователь переходил к любому из маршрутов модуля, а также останавливался, а затем даже видел исходный код модуля.
Angular предоставляет canActivate Guard, который предотвращает несанкционированный доступ к маршруту. Но это не мешает загрузке модуля. Пользователь может использовать консоль разработчика Chrome для просмотра исходного кода. CanLoad Guard предотвращает загрузку модуля.
Фактически, CanLoad защищает загружаемый модуль, но после загрузки модуля CanLoad guard ничего не сделает. Предположим, мы защитили загрузку модуля с помощью CanLoad guard для неаутентифицированного пользователя. Когда пользователь вошел в систему, этот модуль можно будет загрузить, и мы сможем перемещаться по дочерним путям, настроенным этим модулем. Но когда пользователь выйдет из системы, он по-прежнему сможет перемещаться по этим дочерним путям, потому что модуль уже загружен. В этом случае, если мы хотим защитить дочерние пути от неавторизованных пользователей, нам также необходимо использовать CanActivate guard.
Используйте CanLoad перед загрузкой AdminModule:
{
path: 'admin',
loadChildren: 'app/admin/admin.module#AdminModule',
canLoad: [ AuthGuardService ]
},
После загрузки AdminModule в модуле AdminRouting мы можем использовать CanActive для защиты детей от неавторизованных пользователей, как показано ниже:
{
path: '',
component: AdminComponent,
children: [
{
path: 'person-list',
component: PersonListComponent,
canActivate: [ AuthGuardService ]
}
]
}
canActivate
описанным выше сценарием, какая будет разница?