Проверьте доступ к странице - PullRequest
1 голос
/ 24 сентября 2019

Мне нужно создать метод для проверки, равен ли доступ к данным для 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}
  ]},

1 Ответ

0 голосов
/ 24 сентября 2019

Для этой цели вы не можете использовать forEach, так как он ничего не вернет.

const arr = arr = [1, 2, 3];
const res = arr.forEach(v => v *2);

console.log(res); // undefined

Вы можете использовать вместо Array.prototype.includes () :

const hasAccess = next.data.access.includes(access);

Или, если вы хотите найти что-то более сложное, вы можете использовать Array.prototype.some () :

const hasAccess = next.data.access.includes(acc => acc === access);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...