Я могу активировать класс охраны маршрута
.
import {OnDestroy } from '@angular/core';
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot,
Router
} from '@angular/router';
import {Injectable} from '@angular/core';
import {UserAuthorizationService} from "../userauthorizationservice/userauthorizationservice";
@Injectable()
export class ClientSuitsUserGuard implements CanActivate, OnDestroy{
constructor(private userservice: UserAuthorizationService, private router: Router){}
userservicesubscription;
user ={
id: null,
isclient: false,
issuitsviewer: false,
issuitsadministrator: false,
issuitssuperuser: false,
isvenueuser: false
};
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean{
this.userservicesubscription = this.userservice.receiveuser()
.subscribe(
(req: any)=>{
if(req != null){
this.user = req;
if(this.user.isclient || this.user.issuitsviewer || this.user.issuitssuperuser || this.user.issuitsadministrator){
return true;
}
if(this.user == null ){
this.router.navigate(['/signin']);
return false;
}else{
this.router.navigate(['/401']);
return false;
}
}
this.router.navigate(['/signin']);
return false;
}
);
}
ngOnDestroy(){
this.userservicesubscription.unsubscribe();
}
}
И я продолжаю получать сообщение об ошибке:
ОШИБКА в /home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/frontend/suitsandtables/src/app/services/userservice/authguardservices/isclientuserguard.ts (31,44): функция, объявленный тип которой не является ни void 'nor' any 'не должно возвращать значение.
Я хочу, чтобы охранник маршрута получил пользовательскую проверку прав доступа, если атрибуты имеют значение true или нет, и перенаправил на страницы в зависимости от того, являются ли условия ложными или истинными.
Я чувствую, что мой код правильный, и это проблема интерфейса. Могу ли я сделать быстрый твик, чтобы удовлетворить интерфейс?
Что я делаю не так?
Я внес следующие изменения, основываясь на ответе ниже, но теперь мне приходится иметь дело с новой ошибкой из-за нее.
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean>{
return this.userservicesubscription = this.userservice.receiveuser()
.map(
(req: any)=>{
if(req != null){
this.user = req;
if(this.user.isclient || this.user.issuitsviewer || this.user.issuitssuperuser || this.user.issuitsadministrator){
return true;
}
if(this.user == null ){
this.router.navigate(['/signin']);
return false;
}else{
this.router.navigate(['/401']);
return false;
}
}
this.router.navigate(['/signin']);
return false;
}
);
}
с новой ошибкой во время выполнения:
ERROR Error: Uncaught (in promise): TypeError: this.userservice.receiveuser(...).map is not a function
TypeError: this.userservice.receiveuser(...).map is not a function