Các CanLoad Guard ngăn chặn việc tải của Module Loaded Lazy. Chúng tôi thường sử dụng biện pháp bảo vệ này khi chúng tôi không muốn người dùng trái phép điều hướng đến bất kỳ tuyến nào của mô-đun và cũng dừng lại sau đó thậm chí xem mã nguồn của mô-đun.
Angular cung cấp canActivate Guard, ngăn người dùng trái phép truy cập vào tuyến đường. Nhưng nó không ngăn mô-đun được tải xuống. Người dùng có thể sử dụng bảng điều khiển dành cho nhà phát triển chrome để xem mã nguồn. CanLoad Guard ngăn không cho tải xuống mô-đun.
Trên thực tế, CanLoad bảo vệ một mô-đun được tải nhưng một khi mô-đun được tải thì chức năng bảo vệ CanLoad sẽ không làm gì cả. Giả sử chúng ta đã bảo vệ việc tải mô-đun bằng cách sử dụng bảo vệ CanLoad cho người dùng chưa được xác thực. Khi người dùng đăng nhập thì mô-đun đó sẽ được áp dụng để tải và chúng tôi sẽ có thể điều hướng các đường dẫn con được cấu hình bởi mô-đun đó. Nhưng khi người dùng đăng xuất, người dùng vẫn có thể điều hướng các đường dẫn con đó vì mô-đun đã được tải. Trong trường hợp này, nếu chúng tôi muốn bảo vệ đường dẫn trẻ em khỏi những người dùng trái phép, chúng tôi cũng cần sử dụng tính năng bảo vệ CanActivate .
Sử dụng CanLoad trước khi tải AdminModule:
{
path: 'admin',
loadChildren: 'app/admin/admin.module#AdminModule',
canLoad: [ AuthGuardService ]
},
Sau khi tải AdminModule, trong mô-đun AdminRouting, chúng ta có thể sử dụng CanActive để bảo vệ trẻ em khỏi những người dùng trái phép như dưới đây:
{
path: '',
component: AdminComponent,
children: [
{
path: 'person-list',
component: PersonListComponent,
canActivate: [ AuthGuardService ]
}
]
}
canActivate
trong trường hợp trên, sự khác biệt sẽ là gì?