У меня есть пользователи с разными уровнями доступа.У меня есть общая охрана, которая проверяет, что токен установлен и разрешает доступ, если так.Однако я не совсем понимаю, как ограничить пользователей, заходящих на страницы, на их уровне доступа.Провел некоторое исследование, но не вижу много для ионного 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();
}
}