для меня есть два варианта:
1.-Создайте отдельный модуль администратора и используйте loadChildren, чтобы ваши типичные маршруты стали такими:
const routes: Routes = [
{ path: 'One', Component:ComponentOne}
...
{ path: 'Admin', loadChildren: () => import('./admin/admin.module')
.then(mod => mod.AdminModule) },
];
И ваш admin.router
const routes: Routes = [
{ path: 'Login', component: AdminLoginComponent },
{
path: '', component: AdminMainComponent,
canActivateChild: [AuthGuard],
children: [...]
}
]
2. -Заменить «каждый компонент» с помощью * ngIf, лучше использовать директиву, как этот пост Базеля Нетана ,
директива (я копирую) и вставить)
@Directive({selector: '[ifRole]'})
export class IfRoleDirective {
user$ : Subscription;
@Input("ifRole") roleName : string;
constructor( private templateRef : TemplateRef<any>,
private viewContainer : ViewContainerRef,
private authService : AuthService ) {
}
ngOnInit() {
this.user$ = this.authService.user
.do(() => this.viewContainer.clear())
.filter(user => user.role === this.roleName).subscribe(() => {
this.viewContainer.createEmbeddedView(this.templateRef);
});
}
ngOnDestroy() {
this.user$.unsubscribe();
}
}
И использовать
<div *ifRole="'admin'">
Only for Admin
</div>