我有PolicyGuard
一个方法canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot)
。
在canActivate
我创建了一个 observable 时,在这个 observable 内部我订阅了一个从我的AbilityService
.
我从中检索到的 observableAbilityService
监听用户“策略”/“能力”的变化。
当我对用户的“策略”进行更改并将这些更改推送到客户端时,这会变得非常混乱,Socket.io
当我不希望它使用页面重定向到主页时可能会发生(一个订阅运行obs.next(true)
而另一个订阅路由回家并奔跑obs.next(false)
)
离开订阅的页面时,有没有办法让订阅取消订阅?
@Injectable()
export class PolicyGuard implements CanActivate {
constructor(protected router: Router, private abilityService: AbilityService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
console.log("PolicyGuard() - canActivate()");
return new Observable<boolean>(obs => {
const observable = this.abilityService.getAbility();
observable.subscribe(ability => {
const can = ability.can(route.data.action, route.data.subject);
if (can) {
obs.next(true);
}
else {
this.router.navigate(['/home']);
obs.next(false);
}
});
});
}
}