Существует так много разных подходов, которые вы можете использовать, но основная идея заключается в ограничении маршрутов на основе определенного условия с помощью route-guards
.
в вашем случае вы можете иметь маршруты, которые будут загружать ваши модули лениво, когда route-guard
разрешит использовать его и последующие вложенные маршруты будут загружены таким же образом.
Определите свой маршрутный модуль
{
path:'/dashboard',
loadChildren: './lazy.module#LazyModule'
canActivate:[ModuleRouteGuard],
data: {
accessRoles: ['Manager','HR']
}
}
LazyModule_Routes.ts
{
path:'/board',
component: ManagerBoard
canActivate:[ChildRouteGuard],
data: {
accessRoles: ['Manager']
},
resolve: {
userRoles: 'userRolesResolver' //use this resolver service to get data inside component so to decide if user can read/write . OR you can also use activatedRoutes data
}
}
Route-Gaurd.ts
@Injectable()
class ModuleRouteGuard implements CanActivate { (1)
constructor(private userService: UserService) {}; (2)
canActivate() {
console.log("OnlyLoggedInUsers");
if (this.userService.isLoggedIn()) { (3)
return true;
} else {
window.alert("You don't have permission to view this page"); (4)
return false;
}
}
}
распознаватель вашего приложения, который переносит роли пользователей с сервера.
@Injectable()
class UserRolesResolver implements Resolve<Team> {
constructor(private backend: Backend) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<any>|Promise<any>|any {
//return this.backend.fetchTeam(route.params.id);
}
}