CanLoad Guard запобігає завантаженню завантаженого модуля ледачих. Зазвичай ми використовуємо цей захист, коли не хочемо, щоб несанкціонований користувач переходив до будь-якого з маршрутів модуля, а також зупинявся, а потім навіть бачив вихідний код модуля.
Angular надає функцію canActivate Guard, яка запобігає доступу неавторизованого користувача до маршруту. Але це не зупиняє завантаження модуля. Користувач може використовувати консоль розробника chrome, щоб переглянути вихідний код. CanLoad Guard запобігає завантаженню модуля.
Насправді CanLoad захищає модуль, який потрібно завантажити, але як тільки модуль завантажується, то захисник CanLoad нічого не зробить. Припустимо, ми захистили завантаження модуля за допомогою захисту CanLoad для неавторизованого користувача. Коли користувач увійде в систему, тоді цей модуль буде застосовним для завантаження, і ми зможемо орієнтуватися у дочірніх шляхах, налаштованих цим модулем. Але коли користувач виходить із системи, користувач все ще зможе орієнтуватися в цих дочірніх шляхах, оскільки модуль уже завантажений. У цьому випадку, якщо ми хочемо захистити дитячі шляхи від несанкціонованих користувачів, нам також потрібно використовувати захист CanActivate .
Використовуйте 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
в наведеному вище сценарії, яка буде різниця?