From bcb1dff59d875442140eb3e5f063a568a77fdd30 Mon Sep 17 00:00:00 2001 From: kunw Date: Tue, 2 May 2017 17:49:21 +0800 Subject: [PATCH] Fix issues about tags action. --- src/ui_ng/src/app/harbor-routing.module.ts | 1 + .../route/member-guard-activate.service.ts | 45 +++++++++++++------ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/ui_ng/src/app/harbor-routing.module.ts b/src/ui_ng/src/app/harbor-routing.module.ts index f5eb5d075..15b625602 100644 --- a/src/ui_ng/src/app/harbor-routing.module.ts +++ b/src/ui_ng/src/app/harbor-routing.module.ts @@ -94,6 +94,7 @@ const harborRoutes: Routes = [ { path: 'tags/:id/:repo', component: TagRepositoryComponent, + canActivate: [MemberGuard], resolve: { projectResolver: ProjectRoutingResolver } diff --git a/src/ui_ng/src/app/shared/route/member-guard-activate.service.ts b/src/ui_ng/src/app/shared/route/member-guard-activate.service.ts index ebf96d593..931015b94 100644 --- a/src/ui_ng/src/app/shared/route/member-guard-activate.service.ts +++ b/src/ui_ng/src/app/shared/route/member-guard-activate.service.ts @@ -33,20 +33,39 @@ export class MemberGuard implements CanActivate, CanActivateChild { let projectId = route.params['id']; this.sessionService.setProjectMembers([]); return new Promise((resolve, reject) => { - this.projectService.checkProjectMember(projectId) + let user = this.sessionService.getCurrentUser(); + if(user === null) { + this.sessionService.retrieveUser().then(currentUser=>{ + return resolve(this.checkMemberStatus(state.url, projectId)); + }).catch(err=>resolve(true)); + } else { + return resolve(this.checkMemberStatus(state.url, projectId)); + } + }); + } + + checkMemberStatus(url: string, projectId: number): Promise { + return new Promise((resolve, reject)=>{ + this.projectService.checkProjectMember(projectId) .subscribe( - res=>{ - this.sessionService.setProjectMembers(res); - return resolve(true) - }, - error => { - //Add exception for repository in project detail router activation. - if(state.url.endsWith('repository')) { - return resolve(true); - } - this.router.navigate([CommonRoutes.HARBOR_DEFAULT]); - return resolve(false); - }); + res=>{ + this.sessionService.setProjectMembers(res); + return resolve(true); + }, + error => { + //Add exception for repository in project detail router activation. + if(url.endsWith('repository')) { + return resolve(true); + } + this.projectService.getProject(projectId) + .subscribe(project=>{ + if(project.public === 1) { + return resolve(true); + } + this.router.navigate([CommonRoutes.HARBOR_DEFAULT]); + return resolve(false); + }); + }); }); }