[master | DONE]: Add buttons for manage and sandbox in all monitors and align sandbox guard to include members also.
This commit is contained in:
parent
e6fe8c7390
commit
ff86fb98f1
|
@ -14,6 +14,9 @@ import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields
|
||||||
import {RouterHelper} from "../openaireLibrary/utils/routerHelper.class";
|
import {RouterHelper} from "../openaireLibrary/utils/routerHelper.class";
|
||||||
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
||||||
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
||||||
|
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
||||||
|
import {properties as beta} from "../../environments/environment.beta";
|
||||||
|
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'national',
|
selector: 'national',
|
||||||
|
@ -32,7 +35,7 @@ import {ConfigurationService} from "../openaireLibrary/utils/configuration/confi
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-banner-footer">
|
<div class="uk-banner-footer">
|
||||||
<div class="uk-container uk-container-large">
|
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||||
<li [class.uk-active]="!isSearch">
|
<li [class.uk-active]="!isSearch">
|
||||||
<a [routerLink]="'/national'">{{entities.stakeholder}}</a>
|
<a [routerLink]="'/national'">{{entities.stakeholder}}</a>
|
||||||
|
@ -42,6 +45,14 @@ import {ConfigurationService} from "../openaireLibrary/utils/configuration/confi
|
||||||
Browse {{openaireEntities.RESULTS}}</a>
|
Browse {{openaireEntities.RESULTS}}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||||
|
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Manage
|
||||||
|
</a>
|
||||||
|
<a *ngIf="isMember" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Sandbox
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -60,10 +71,12 @@ import {ConfigurationService} from "../openaireLibrary/utils/configuration/confi
|
||||||
export class NationalComponent extends StakeholderBaseComponent implements OnInit {
|
export class NationalComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
stakeholder: Stakeholder;
|
stakeholder: Stakeholder;
|
||||||
loading: boolean = true;
|
loading: boolean = true;
|
||||||
|
isMobile: boolean = false;
|
||||||
isSearch: boolean = false;
|
isSearch: boolean = false;
|
||||||
openaireEntities = OpenaireEntities;
|
openaireEntities = OpenaireEntities;
|
||||||
|
|
||||||
constructor(private stakeholderService: StakeholderService,
|
constructor(private stakeholderService: StakeholderService,
|
||||||
|
private userManagementService: UserManagementService,
|
||||||
private layoutService: LayoutService,
|
private layoutService: LayoutService,
|
||||||
protected _router: Router,
|
protected _router: Router,
|
||||||
protected _route: ActivatedRoute,
|
protected _route: ActivatedRoute,
|
||||||
|
@ -81,6 +94,9 @@ export class NationalComponent extends StakeholderBaseComponent implements OnIni
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.layoutService.setRootClass('country');
|
this.layoutService.setRootClass('country');
|
||||||
|
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
|
||||||
|
this.isMobile = isMobile;
|
||||||
|
}));
|
||||||
this.stakeholderService.getStakeholder(this._route.snapshot.data.stakeholder).subscribe(stakeholder => {
|
this.stakeholderService.getStakeholder(this._route.snapshot.data.stakeholder).subscribe(stakeholder => {
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
if(this.stakeholder) {
|
if(this.stakeholder) {
|
||||||
|
@ -98,4 +114,23 @@ export class NationalComponent extends StakeholderBaseComponent implements OnIni
|
||||||
super.ngOnDestroy();
|
super.ngOnDestroy();
|
||||||
this.layoutService.setRootClass(null);
|
this.layoutService.setRootClass(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isManager() {
|
||||||
|
return Session.isPortalAdministrator(this.userManagementService.user) ||
|
||||||
|
Session.isCurator(this.stakeholder.type, this.userManagementService.user) ||
|
||||||
|
Session.isManager(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get isMember() {
|
||||||
|
return this.isManager ||
|
||||||
|
Session.isMember(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get adminLink() {
|
||||||
|
return "/admin/" + this.stakeholder.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
get sandboxLink() {
|
||||||
|
return beta.domain + '/national/';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,9 @@ import {SearchDataprovidersService} from "../openaireLibrary/services/searchData
|
||||||
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||||
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
||||||
import {Irish} from "../shared/irish";
|
import {Irish} from "../shared/irish";
|
||||||
|
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
||||||
|
import {properties as beta} from "../../environments/environment.beta";
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'repository',
|
selector: 'repository',
|
||||||
|
@ -44,7 +47,7 @@ import {Irish} from "../shared/irish";
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-text-small">
|
<div class="uk-text-small">
|
||||||
<!-- Website URL -->
|
<!-- Website URL -->
|
||||||
<div *ngIf="stakeholder.details.websiteURL && stakeholder.details.websiteURL != ''" class="uk-margin-xsmall-bottom">
|
<div *ngIf="stakeholder.details?.websiteURL" class="uk-margin-xsmall-bottom">
|
||||||
<span>Website URL: </span>
|
<span>Website URL: </span>
|
||||||
<span class="uk-text-italic">
|
<span class="uk-text-italic">
|
||||||
<a href="{{stakeholder.details.websiteURL}}" target="_blank" class="custom-external">
|
<a href="{{stakeholder.details.websiteURL}}" target="_blank" class="custom-external">
|
||||||
|
@ -53,7 +56,7 @@ import {Irish} from "../shared/irish";
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- OAI-PMH URL-->
|
<!-- OAI-PMH URL-->
|
||||||
<div *ngIf="stakeholder.details.OAIPMHURL && stakeholder.details.OAIPMHURL != ''" class="uk-margin-xsmall-bottom">
|
<div *ngIf="stakeholder.details?.OAIPMHURL" class="uk-margin-xsmall-bottom">
|
||||||
<span>OAI-PMH URL: </span>
|
<span>OAI-PMH URL: </span>
|
||||||
<span class="uk-text-italic">
|
<span class="uk-text-italic">
|
||||||
<a href="{{stakeholder.details.OAIPMHURL}}" target="_blank" class="custom-external">
|
<a href="{{stakeholder.details.OAIPMHURL}}" target="_blank" class="custom-external">
|
||||||
|
@ -84,11 +87,17 @@ import {Irish} from "../shared/irish";
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a *ngIf="isProvideManager" [href]="provideLink" target="_blank" class="uk-button uk-margin-large-right uk-flex uk-flex-middle">
|
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||||
<span class="uk-margin-small-right">Manage at</span>
|
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
<img class="uk-margin-xsmall-bottom" width="78" src="assets/common-assets/logo-small-provide.png">
|
Manage
|
||||||
<icon name="east" flex="true" class="uk-margin-small-left"></icon>
|
</a>
|
||||||
</a>
|
<a *ngIf="isMember" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Sandbox
|
||||||
|
</a>
|
||||||
|
<a *ngIf="isProvideManager && provideLink" [href]="provideLink" target="_blank" class="uk-button uk-flex uk-flex-middle">
|
||||||
|
<img class="uk-margin-xsmall-bottom" width="78" src="assets/common-assets/logo-small-provide.png">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -104,6 +113,7 @@ export class RepositoryComponent extends StakeholderBaseComponent implements OnI
|
||||||
stakeholder: Stakeholder;
|
stakeholder: Stakeholder;
|
||||||
alias: string;
|
alias: string;
|
||||||
isSearch: boolean = false;
|
isSearch: boolean = false;
|
||||||
|
isMobile: boolean = false;
|
||||||
loading: boolean = false;
|
loading: boolean = false;
|
||||||
openaireEntities = OpenaireEntities;
|
openaireEntities = OpenaireEntities;
|
||||||
isProvideManager: boolean;
|
isProvideManager: boolean;
|
||||||
|
@ -131,6 +141,9 @@ export class RepositoryComponent extends StakeholderBaseComponent implements OnI
|
||||||
this.title = 'Repository Monitors';
|
this.title = 'Repository Monitors';
|
||||||
this.description = 'Repository Monitors';
|
this.description = 'Repository Monitors';
|
||||||
this.setMetadata();
|
this.setMetadata();
|
||||||
|
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
|
||||||
|
this.isMobile = isMobile;
|
||||||
|
}));
|
||||||
this.params.subscribe(params => {
|
this.params.subscribe(params => {
|
||||||
this.alias = params['stakeholder'];
|
this.alias = params['stakeholder'];
|
||||||
if (this.alias) {
|
if (this.alias) {
|
||||||
|
@ -154,6 +167,9 @@ export class RepositoryComponent extends StakeholderBaseComponent implements OnI
|
||||||
this.isProvideManager = !!user.role.find(role => role.includes(this.stakeholder.details.originalId.toUpperCase()));
|
this.isProvideManager = !!user.role.find(role => role.includes(this.stakeholder.details.originalId.toUpperCase()));
|
||||||
}));
|
}));
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
}, error => {
|
||||||
|
this.stakeholder.details = null;
|
||||||
|
this.loading = false;
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
this.navigateToError();
|
this.navigateToError();
|
||||||
|
@ -167,6 +183,25 @@ export class RepositoryComponent extends StakeholderBaseComponent implements OnI
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isManager() {
|
||||||
|
return Session.isPortalAdministrator(this.userManagementService.user) ||
|
||||||
|
Session.isCurator(this.stakeholder.type, this.userManagementService.user) ||
|
||||||
|
Session.isManager(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get isMember() {
|
||||||
|
return this.isManager ||
|
||||||
|
Session.isMember(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get adminLink() {
|
||||||
|
return "/admin/" + this.stakeholder.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
get sandboxLink() {
|
||||||
|
return beta.domain + '/repository/' + this.stakeholder.alias;
|
||||||
|
}
|
||||||
|
|
||||||
get provideLink() {
|
get provideLink() {
|
||||||
if(this.stakeholder?.details?.originalId) {
|
if(this.stakeholder?.details?.originalId) {
|
||||||
return 'https://' + (this.properties.environment != 'production'?'beta.':'') + 'provide.openaire.eu/repository/' + this.stakeholder.details.originalId + '/dashboard';
|
return 'https://' + (this.properties.environment != 'production'?'beta.':'') + 'provide.openaire.eu/repository/' + this.stakeholder.details.originalId + '/dashboard';
|
||||||
|
|
|
@ -13,6 +13,9 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
|
||||||
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
|
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
|
||||||
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
||||||
import {Irish} from "../shared/irish";
|
import {Irish} from "../shared/irish";
|
||||||
|
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||||
|
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
||||||
|
import {properties as beta} from "../../environments/environment.beta";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'rfo',
|
selector: 'rfo',
|
||||||
|
@ -45,7 +48,7 @@ import {Irish} from "../shared/irish";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="stakeholder" class="uk-banner-footer">
|
<div *ngIf="stakeholder" class="uk-banner-footer">
|
||||||
<div class="uk-container uk-container-large">
|
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||||
<li [class.uk-active]="!isSearch">
|
<li [class.uk-active]="!isSearch">
|
||||||
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
|
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
|
||||||
|
@ -56,6 +59,14 @@ import {Irish} from "../shared/irish";
|
||||||
[relativeTo]="_route">Browse {{openaireEntities.RESULTS}}</a>
|
[relativeTo]="_route">Browse {{openaireEntities.RESULTS}}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||||
|
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Manage
|
||||||
|
</a>
|
||||||
|
<a *ngIf="isMember" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Sandbox
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,10 +82,12 @@ export class RfoComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
stakeholder: Stakeholder;
|
stakeholder: Stakeholder;
|
||||||
alias: string;
|
alias: string;
|
||||||
isSearch: boolean = false;
|
isSearch: boolean = false;
|
||||||
|
isMobile: boolean = false;
|
||||||
loading: boolean = false;
|
loading: boolean = false;
|
||||||
openaireEntities = OpenaireEntities;
|
openaireEntities = OpenaireEntities;
|
||||||
|
|
||||||
constructor(private stakeholderService: StakeholderService,
|
constructor(private stakeholderService: StakeholderService,
|
||||||
|
private userManagementService: UserManagementService,
|
||||||
private layoutService: LayoutService,
|
private layoutService: LayoutService,
|
||||||
private _customFilterService: CustomFilterService,
|
private _customFilterService: CustomFilterService,
|
||||||
protected _router: Router,
|
protected _router: Router,
|
||||||
|
@ -96,6 +109,9 @@ export class RfoComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
this.title = 'RFOs';
|
this.title = 'RFOs';
|
||||||
this.description = 'RFOs';
|
this.description = 'RFOs';
|
||||||
this.setMetadata();
|
this.setMetadata();
|
||||||
|
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
|
||||||
|
this.isMobile = isMobile;
|
||||||
|
}));
|
||||||
this.params.subscribe(params => {
|
this.params.subscribe(params => {
|
||||||
this.alias = params['stakeholder'];
|
this.alias = params['stakeholder'];
|
||||||
if (this.alias) {
|
if (this.alias) {
|
||||||
|
@ -131,4 +147,23 @@ export class RfoComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
this.layoutService.setRootClass(null);
|
this.layoutService.setRootClass(null);
|
||||||
this.setProperties(Irish.irishAdminToolsCommunity, Irish.irishAdminToolsPortalType, this.configurationService);
|
this.setProperties(Irish.irishAdminToolsCommunity, Irish.irishAdminToolsPortalType, this.configurationService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isManager() {
|
||||||
|
return Session.isPortalAdministrator(this.userManagementService.user) ||
|
||||||
|
Session.isCurator(this.stakeholder.type, this.userManagementService.user) ||
|
||||||
|
Session.isManager(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get isMember() {
|
||||||
|
return this.isManager ||
|
||||||
|
Session.isMember(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get adminLink() {
|
||||||
|
return "/admin/" + this.stakeholder.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
get sandboxLink() {
|
||||||
|
return beta.domain + '/rfo/' + this.stakeholder.alias;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,9 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
|
||||||
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
|
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
|
||||||
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
||||||
import {Irish} from "../shared/irish";
|
import {Irish} from "../shared/irish";
|
||||||
import {Role} from "../openaireLibrary/login/utils/helper.class";
|
import {Role, Session} from "../openaireLibrary/login/utils/helper.class";
|
||||||
|
import {properties as beta} from "../../environments/environment.beta";
|
||||||
|
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'rpo',
|
selector: 'rpo',
|
||||||
|
@ -46,7 +48,7 @@ import {Role} from "../openaireLibrary/login/utils/helper.class";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="stakeholder" class="uk-banner-footer">
|
<div *ngIf="stakeholder" class="uk-banner-footer">
|
||||||
<div class="uk-container uk-container-large">
|
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||||
<li [class.uk-active]="!isSearch">
|
<li [class.uk-active]="!isSearch">
|
||||||
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
|
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
|
||||||
|
@ -57,6 +59,14 @@ import {Role} from "../openaireLibrary/login/utils/helper.class";
|
||||||
[relativeTo]="_route">Browse {{openaireEntities.RESULTS}}</a>
|
[relativeTo]="_route">Browse {{openaireEntities.RESULTS}}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||||
|
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Manage
|
||||||
|
</a>
|
||||||
|
<a *ngIf="isMember" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||||
|
Sandbox
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,12 +81,14 @@ import {Role} from "../openaireLibrary/login/utils/helper.class";
|
||||||
export class RpoComponent extends StakeholderBaseComponent implements OnInit {
|
export class RpoComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
stakeholder: Stakeholder;
|
stakeholder: Stakeholder;
|
||||||
alias: string;
|
alias: string;
|
||||||
|
isMobile: boolean = false;
|
||||||
isSearch: boolean = false;
|
isSearch: boolean = false;
|
||||||
loading: boolean = false;
|
loading: boolean = false;
|
||||||
openaireEntities = OpenaireEntities;
|
openaireEntities = OpenaireEntities;
|
||||||
|
|
||||||
constructor(private stakeholderService: StakeholderService,
|
constructor(private stakeholderService: StakeholderService,
|
||||||
private _customFilterService: CustomFilterService,
|
private _customFilterService: CustomFilterService,
|
||||||
|
private userManagementService: UserManagementService,
|
||||||
private layoutService: LayoutService,
|
private layoutService: LayoutService,
|
||||||
protected _router: Router,
|
protected _router: Router,
|
||||||
protected _route: ActivatedRoute,
|
protected _route: ActivatedRoute,
|
||||||
|
@ -97,6 +109,9 @@ export class RpoComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
this.title = 'RPOs';
|
this.title = 'RPOs';
|
||||||
this.description = 'RPOs';
|
this.description = 'RPOs';
|
||||||
this.setMetadata();
|
this.setMetadata();
|
||||||
|
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
|
||||||
|
this.isMobile = isMobile;
|
||||||
|
}));
|
||||||
this.params.subscribe(params => {
|
this.params.subscribe(params => {
|
||||||
this.alias = params['stakeholder'];
|
this.alias = params['stakeholder'];
|
||||||
if (this.alias) {
|
if (this.alias) {
|
||||||
|
@ -133,6 +148,25 @@ export class RpoComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
this.layoutService.setRootClass(null);
|
this.layoutService.setRootClass(null);
|
||||||
this.setProperties(Irish.irishAdminToolsCommunity, Irish.irishAdminToolsPortalType, this.configurationService);
|
this.setProperties(Irish.irishAdminToolsCommunity, Irish.irishAdminToolsPortalType, this.configurationService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isManager() {
|
||||||
|
return Session.isPortalAdministrator(this.userManagementService.user) ||
|
||||||
|
Session.isCurator(this.stakeholder.type, this.userManagementService.user) ||
|
||||||
|
Session.isManager(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get isMember() {
|
||||||
|
return this.isManager ||
|
||||||
|
Session.isMember(this.stakeholder.type, this.stakeholder.alias, this.userManagementService.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
get adminLink() {
|
||||||
|
return "/admin/" + this.stakeholder.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
get sandboxLink() {
|
||||||
|
return beta.domain + '/rpo/' + this.stakeholder.alias;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,35 +1,64 @@
|
||||||
import {AdminDashboardGuard} from "../openaireLibrary/monitor-admin/utils/adminDashboard.guard";
|
import {AdminDashboardGuard} from "../openaireLibrary/monitor-admin/utils/adminDashboard.guard";
|
||||||
import {Injectable} from "@angular/core";
|
import {Injectable} from "@angular/core";
|
||||||
import {ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree} from "@angular/router";
|
import {ActivatedRouteSnapshot, Router, RouterStateSnapshot, UrlTree} from "@angular/router";
|
||||||
import {Observable} from "rxjs";
|
import {Observable, zip} from "rxjs";
|
||||||
import {properties} from "../../environments/environment";
|
import {properties} from "../../environments/environment";
|
||||||
import {LoginErrorCodes} from "../openaireLibrary/login/utils/guardHelper.class";
|
import {LoginErrorCodes} from "../openaireLibrary/login/utils/guardHelper.class";
|
||||||
import {map, tap} from "rxjs/operators";
|
import {map, take, tap} from "rxjs/operators";
|
||||||
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
||||||
|
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||||
|
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class SandboxGuard extends AdminDashboardGuard {
|
export class SandboxGuard {
|
||||||
|
|
||||||
|
constructor(private userManagementService: UserManagementService,
|
||||||
|
private stakeholderService: StakeholderService,
|
||||||
|
private router: Router) {
|
||||||
|
}
|
||||||
|
|
||||||
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
|
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
|
||||||
let sandbox = properties.environment === 'beta';
|
let sandbox = properties.environment === 'development';
|
||||||
if(childRoute.data['researcher'] && childRoute.params.stakeholder && sandbox) {
|
if (childRoute.data['researcher'] && childRoute.params.stakeholder && sandbox) {
|
||||||
let errorCode = LoginErrorCodes.NOT_LOGIN;
|
return this.checkResearcher(state.url, childRoute.params.stakeholder);
|
||||||
let alias = childRoute.params.stakeholder;
|
|
||||||
return this.userManagementService.getUserInfo().pipe(map(user => {
|
|
||||||
if(user) {
|
|
||||||
errorCode = LoginErrorCodes.NOT_ADMIN;
|
|
||||||
}
|
|
||||||
return user && (Session.isPortalAdministrator(user) ||
|
|
||||||
Session.isCurator('researcher', user) || user?.orcid === alias);
|
|
||||||
}), tap(authorized => {
|
|
||||||
if(!authorized){
|
|
||||||
this.router.navigate(['/user-info'], {queryParams: {'errorCode': errorCode, 'redirectUrl':state.url}});
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
} else {
|
} else {
|
||||||
return !sandbox || super.canActivateChild(childRoute, state);
|
return !sandbox || this.check(state.url, childRoute.data?.stakeholder?childRoute.data.stakeholder:childRoute.params.stakeholder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkResearcher(path: string, alias: string) {
|
||||||
|
let errorCode = LoginErrorCodes.NOT_LOGIN;
|
||||||
|
return this.userManagementService.getUserInfo().pipe(map(user => {
|
||||||
|
if (user) {
|
||||||
|
errorCode = LoginErrorCodes.NOT_ADMIN;
|
||||||
|
}
|
||||||
|
return user && (Session.isPortalAdministrator(user) ||
|
||||||
|
Session.isCurator('researcher', user) || user?.orcid === alias);
|
||||||
|
}), tap(authorized => {
|
||||||
|
if (!authorized) {
|
||||||
|
this.router.navigate(['/user-info'], {queryParams: {'errorCode': errorCode, 'redirectUrl': path}});
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
check(path: string, alias: string): Observable<boolean> | boolean {
|
||||||
|
let errorCode = LoginErrorCodes.NOT_LOGIN;
|
||||||
|
return zip(
|
||||||
|
this.userManagementService.getUserInfo(), this.stakeholderService.getStakeholder(alias)
|
||||||
|
).pipe(take(1), map(res => {
|
||||||
|
if (res[0]) {
|
||||||
|
errorCode = LoginErrorCodes.NOT_ADMIN;
|
||||||
|
}
|
||||||
|
return res[0] && res[1] && (Session.isPortalAdministrator(res[0]) ||
|
||||||
|
Session.isCurator(res[1].type, res[0]) ||
|
||||||
|
Session.isManager(res[1].type, res[1].alias, res[0]) ||
|
||||||
|
Session.isMember(res[1].type, res[1].alias, res[0]))
|
||||||
|
}), tap(authorized => {
|
||||||
|
if (!authorized) {
|
||||||
|
this.router.navigate(['/user-info'], {queryParams: {'errorCode': errorCode, 'redirectUrl': path}});
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
& .uk-button {
|
& .uk-button {
|
||||||
|
height: 100%;
|
||||||
background: @banner-tab-button-background;
|
background: @banner-tab-button-background;
|
||||||
border-radius: @banner-tab-button-border-radius;
|
border-radius: @banner-tab-button-border-radius;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue