私の目標は、AuthGuardを実装して、ユーザーが自分の役割と要求されたルートに基づいて特定のルートにアクセスできるかどうかをチェックし、ルートに適切な役割を果たす場合、そうでない場合は別の場所にリダイレクトしてください。Angular2 - ロールベースのAuthGuard
AuthGuardはObservable(UserRole)を返すAuthorizationServiceを呼び出します。私は、ユーザーの観測可能性を評価し、canActivateに値を返すのが難しいです。確かにRxJS Observablesの私の未経験さに関係していますが、私はこれを過ぎているようには見えません。
は私がauth.guard.service.ts
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
let url: string = state.url;
var currentUser$ = this.authService.getCurrentUser();
currentUser$.subscribe((currentUser: MyUser) => {
if (currentUser.isInternalUser && url === '/internal') {
console.debug("Internal User! Yes");
this.router.navigate(['/internal']);
return true;
} else if (currentUser.isExternalUser && url === '/dashboard') {
console.debug("External User! Yes");
this.router.navigate(['/external']);
return true;
} else {
console.debug("Access Denied...");
this.router.navigate(['/pagenotfound']);
return false;
}
});
//return Observable.of(false); // I need to return something, but this is not what I want to return!!
}
auth.service.ts
getCurrentUser() : Observable<MyUser> {
let currentUser$: Observable<MyUser>;
currentUser$ = this.http.get(this.location.prepareExternalUrl('api/v1/userprofile/'))
.cache()
.map(this.extractData)
.catch(this.handleError);
console.log("AuthService#getCurrentUser being called.");
return currentUser$;
}
がどのように私はあるCurrentUserを評価し、ブール値を返すcanActivateを持つことができますがあります観察できる?
私はこれに着陸しました: var currentUser $ = this.authService.getCurrentUser(); リターンあるCurrentUser $ .MAP(X => { IF(x.isExternalUser && URL === '/ダッシュボード'){ リターン真; }そうであれば(x.isInternalUser && URL === '/内部' ){ return true; } else { this.router.navigate(['/ pagenotfound']); false false; } }); – ClaytonK
十分にはっきりしていますが、リダイレクトの結果が失われることは指摘しますが、URLが見つからないページに移動したときに戻ってくるのを待っているわけではないからです。 – paulpdaniels
@PaulDaniels「Observable.fromPromise」を使った理由を説明します。私はそれを私のコードに組み込みます。私はRxJsにはとても新しいので、まだそれを手に入れようとしています。 – ClaytonK