Мне нужно создать метод для проверки, равен ли доступ к данным для next.data.access.Я могу использовать метод включает в себя, потому что это массив.хорошо только одно из значений доступа к данным в массиве, чтобы вернуть true
auth.guards.ts
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return from(this.authService.me().then(data => {
let access = data['role']['unlocks'];
if('access' in next.data) {
let eachAccess = next.data.access.forEach(each => {
each.includes(access);
} );
let hasAccess = eachAccess === next.data.access;
console.log(hasAccess)
if (hasAccess) {
return next.component !== LoginComponent;
} else {
console.warn('User doesn\'t have access to this page.');
this.router.navigate(['/selection']);
return false;
}
routing module.ts
{ path: 'admin', canActivate:[AuthGuard], component: AdminComponent, data: {access : ['ALL']}, children: [
{ path: 'manageUsers', component: ManageUserComponent}
]},
{ path: 'client', canActivate:[AuthGuard], data: {access : ['ALL','CLIENT']}, children: [
{ path: '', component: DashboardComponent },
{ path: 'dashboard', component: DashboardComponent},
{ path: 'greenhouse', component: GreenhouseComponent},
{ path: 'recipe', component: RecipeComponent},
{ path: 'greenhouse/mylamps', component: MylampsComponent},
]},
{ path: 'tools', canActivate:[AuthGuard], data: {access : ['ALL','TOOLS']}, children: [
{ path: '', component: ToolsComponent },
{ path: 'information', component: UserInformationComponent},
{ path: 'light', component: LightComponent},
{ path: 'spectrum', component: RefSpectrumComponent},
{ path: 'test', component: TestComponent},
{ path: 'progress', component: InProgressComponent}
]},