Использование охранников для разных уровней доступа в Ionic 4 - PullRequest
0 голосов
/ 06 июля 2019

У меня есть пользователи с разными уровнями доступа.У меня есть общая охрана, которая проверяет, что токен установлен и разрешает доступ, если так.Однако я не совсем понимаю, как ограничить пользователей, заходящих на страницы, на их уровне доступа.Провел некоторое исследование, но не вижу много для ионного 4.

login.ts

login(emailin, pwin) {
  const data = {
    email: emailin,
    pw: pwin,
  };

  return this.http.post<any>(apiUrl + 'login.php', JSON.stringify(data))
    .pipe(first())
    .subscribe((result) => {
      this.storage.set('token', result.jwt);

      if (result.level === 'Consultant') {
        this.router.navigate(['/menu/first/tabs/tab1'], result);
        this.authState.next(true);
      } else if (result.level === 'Volunteer') {
        this.router.navigate(['register'], result);
        this.authState.next(true);
      } else if (result.level === 'Clinician') {
        this.router.navigate(['/menu/first/tabs/tab1']);
        this.authState.next(true);
      }
    },
    (error) => {
      if (emailin === '' || pwin === '' ) {
        this.alertService.presentAlertLogin();
      } else  if (error.status === 403) {
        this.alertService.presentAlertLogin();
      } else if (error.status === 401) {}
    });
}

isAuthenticated() {
  return this.authState.value;
}

guard.ts

export class Guard implements CanActivate {
  path: ActivatedRouteSnapshot[];
  route: ActivatedRouteSnapshot;

  constructor(public router: Router, public authService: AuthService) { }

  // Works but ony if a JWT is present.
  canActivate(): boolean {
    if (this.authService.isAuthenticated() === false) {
      this.router.navigate(['not-found']);
    }
    return this.authService.isAuthenticated();
  }
}

1 Ответ

0 голосов
/ 06 июля 2019

Вы можете использовать несколько охранников для страниц, которые требуют особого уровня доступа. Например,

Консультант страница будет иметь двух охранников, как показано ниже,

path : 'consult'
canActivate : [ Guard, ConsultGuard ]

Для Клиницист

path : 'clincian'
canActivate : [ Guard, ClinicianGuard ]

А у этих конкретных охранников вы будете проверять только уровень доступа, так как для входа в путь все охранники должны вернуть true.

Таким образом, вам придется сохранить свой ответ login.php или просто уровень доступа в службе аутентификации, чтобы охранники могли его использовать.

...