разрешения на чтение из массива - PullRequest
0 голосов
/ 20 февраля 2020

разрешения пользователя поступают в массив, как я проверяю, имеет ли он доступ, повторяя arrat

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 

   const expectedPermission = route.data.expectedPermission;
   const token= localStorage.getItem("Token")
   const tokenPayload = decode(token);
   const role=tokenPayload['https://menu-api.demo.com/roles'][0];
   console.log(route);
   const permissions=["create:user", "delete:user", "read:user"]
     if (!this.auth.isAuthenticated() || permissions !== expectedPermission) {
       this.router.navigate(['external-api']);
         return false;
     }

   return true;
 }

{
    path: 'profile',
    component: ProfileComponent,
    canActivate: [RoleGuard], 
    data: { 
      expectedPermission: 'read:user'
    }
  }

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вам нужно проверить, существует ли expectedPermission в массиве permissions.

Есть несколько способов сделать это. Если строки гарантированно точно совпадают (в одном и том же случае), вы можете использовать функцию массива includes.

if (!this.auth.isAuthenticated() || !permissions.includes(expectedPermission)) {
  // user doesn't have permission
}
0 голосов
/ 20 февраля 2020

Ваша проблема в том, что вы сравниваете ссылки на массивы, что, вероятно, не то, что вы хотите.

Вы должны проверить, существуют ли все expectedPermissions в permissions. Это может быть достигнуто путем комбинирования функций every и includes:

if (!this.auth.isAuthenticated() || !expectedPermission.every(expectedPermission => permissions.includes(expectedPermission))) {
 //no permission
}

Every зацикливается в массиве expectedPermissions и возвращает true, только если данный предикат имеет значение true для каждого элемента. Мы используем предикат для проверки того, включен ли элемент в массив разрешений.

...