У меня есть следующие возможности активировать класс защиты маршрута
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/uservice/authguardservices/isclientuserguard.ts (31,44): функция, объявленный тип которой не является ни void, ни any 'должен возвращать значение.
Я хочу, чтобы охранник маршрута получал проверку прав пользователя, истинны ли атрибуты или нет, и перенаправлял на страницы в зависимости от того, являются ли условия ложными или истинными.
Я чувствую, что мой код правильный, и это проблема интерфейса. Могу ли я сделать какие-нибудь быстрые настройки, чтобы удовлетворить интерфейс?
Что я делаю неправильно?
Я внес следующие изменения на основе приведенного ниже ответа, но теперь мне приходится иметь дело с новой ошибкой из-за этого.
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
subscribe
не возвращают значения для вашего методаcanActivate
. Вместо подписки вы захотите использовать методmap
и вернуть эту наблюдаемую цепочку (обновив результат возврата доObservable<boolean>
). - person Daniel W Strimpel   schedule 10.05.2018