diff --git a/src/app/admin/api-key/api-key-list/api-key-list.component.html b/src/app/admin/api-key/api-key-list/api-key-list.component.html
index 8ecf306ee..4960433b4 100644
--- a/src/app/admin/api-key/api-key-list/api-key-list.component.html
+++ b/src/app/admin/api-key/api-key-list/api-key-list.component.html
@@ -2,6 +2,7 @@
[title]="'NAV.API-KEY' | translate"
[ctaLabel]="'API-KEY.CREATE-NEW-API-KEY' | translate"
[ctaRouterLink]="'new-api-key'"
+ [canEdit]="canEdit"
>
diff --git a/src/app/admin/api-key/api-key-list/api-key-list.component.ts b/src/app/admin/api-key/api-key-list/api-key-list.component.ts
index f422eac11..9fdf53d36 100644
--- a/src/app/admin/api-key/api-key-list/api-key-list.component.ts
+++ b/src/app/admin/api-key/api-key-list/api-key-list.component.ts
@@ -2,6 +2,8 @@ import { Component, Input, OnInit } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { TranslateService } from '@ngx-translate/core';
import { SharedVariableService } from '@shared/shared-variable/shared-variable.service';
+import { MeService } from '@shared/services/me.service';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
@Component({
selector: 'app-api-key-list',
@@ -10,11 +12,13 @@ import { SharedVariableService } from '@shared/shared-variable/shared-variable.s
})
export class ApiKeyListComponent implements OnInit {
@Input() organisationId: number;
+ canEdit: boolean;
constructor(
public translate: TranslateService,
private titleService: Title,
- private globalService: SharedVariableService
+ private globalService: SharedVariableService,
+ private meService: MeService
) {
translate.use('da');
}
@@ -24,5 +28,6 @@ export class ApiKeyListComponent implements OnInit {
this.titleService.setTitle(translations['TITLE.API-KEY']);
});
this.organisationId = this.globalService.getSelectedOrganisationId();
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.UserAdministrationWrite, this.organisationId);
}
}
diff --git a/src/app/admin/api-key/api-key-list/api-key-table/api-key-table.component.ts b/src/app/admin/api-key/api-key-list/api-key-table/api-key-table.component.ts
index 208d9c8e9..a669a2331 100644
--- a/src/app/admin/api-key/api-key-list/api-key-table/api-key-table.component.ts
+++ b/src/app/admin/api-key/api-key-list/api-key-table/api-key-table.component.ts
@@ -9,6 +9,7 @@ import { merge, Observable, of } from 'rxjs';
import { catchError, map, startWith, switchMap } from 'rxjs/operators';
import { ApiKeyGetManyResponse, ApiKeyResponse } from '../../api-key.model';
import { ApiKeyService } from '../../api-key.service';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
@Component({
selector: 'app-api-key-table',
@@ -81,7 +82,8 @@ export class ApiKeyTableComponent implements AfterViewInit {
}
canAccess(_element: ApiKeyResponse) {
- return this.meService.hasAdminAccessInTargetOrganization(
+ return this.meService.hasAccessToTargetOrganization(
+ OrganizationAccessScope.UserAdministrationWrite,
this.organisationId
);
}
diff --git a/src/app/admin/organisation/organisation-detail/organisation-detail.component.html b/src/app/admin/organisation/organisation-detail/organisation-detail.component.html
index ced52e8af..0f7fac379 100644
--- a/src/app/admin/organisation/organisation-detail/organisation-detail.component.html
+++ b/src/app/admin/organisation/organisation-detail/organisation-detail.component.html
@@ -1,6 +1,13 @@
-
\ No newline at end of file
+
diff --git a/src/app/admin/organisation/organisation-detail/organisation-detail.component.ts b/src/app/admin/organisation/organisation-detail/organisation-detail.component.ts
index 38cce3fba..737aa23e1 100644
--- a/src/app/admin/organisation/organisation-detail/organisation-detail.component.ts
+++ b/src/app/admin/organisation/organisation-detail/organisation-detail.component.ts
@@ -15,6 +15,8 @@ import { DropdownButton } from '@shared/models/dropdown-button.model';
import { ApplicationService } from '@applications/application.service';
import { environment } from '@environments/environment';
import { Title } from '@angular/platform-browser';
+import { MeService } from '@shared/services/me.service';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
@Component({
selector: 'app-organisation-detail',
@@ -41,6 +43,7 @@ export class OrganisationDetailComponent implements OnInit, OnChanges, OnDestroy
id: number;
subscription: Subscription;
permissions: PermissionResponse[];
+ canEdit: boolean;
constructor(
public translate: TranslateService,
@@ -49,7 +52,8 @@ export class OrganisationDetailComponent implements OnInit, OnChanges, OnDestroy
private permissionsService: PermissionService,
private deleteDialogService: DeleteDialogService,
private location: Location,
- private titleService: Title
+ private titleService: Title,
+ private meService: MeService
) { }
ngOnChanges(changes: SimpleChanges): void {
@@ -71,8 +75,10 @@ export class OrganisationDetailComponent implements OnInit, OnChanges, OnDestroy
.subscribe(translations => {
this.backButton.label = translations['NAV.ORGANISATIONS'];
this.dropdownButton.label = translations['ORGANISATION.DROPDOWN'];
- this.titleService.setTitle(translations['TITLE.ORGANIZATION'])
+ this.titleService.setTitle(translations['TITLE.ORGANIZATION']);
});
+
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.UserAdministrationWrite);
}
ngOnDestroy() {
@@ -119,6 +125,6 @@ export class OrganisationDetailComponent implements OnInit, OnChanges, OnDestroy
}
});
}
- })
+ });
}
}
diff --git a/src/app/admin/organisation/organisation-list/organisation-list.component.html b/src/app/admin/organisation/organisation-list/organisation-list.component.html
index 9cba6082c..d1b269ec0 100644
--- a/src/app/admin/organisation/organisation-list/organisation-list.component.html
+++ b/src/app/admin/organisation/organisation-list/organisation-list.component.html
@@ -1,5 +1,5 @@
+ [addDetailDowndown]="true" [dropDownButton]="dropdownButton" (deleteSelectedInDropdown)="onDeleteApplication()"
+ [canEdit]="canEdit">
diff --git a/src/app/applications/application-detail/application-detail.component.ts b/src/app/applications/application-detail/application-detail.component.ts
index 2b6dfdbeb..84587a0e6 100644
--- a/src/app/applications/application-detail/application-detail.component.ts
+++ b/src/app/applications/application-detail/application-detail.component.ts
@@ -17,6 +17,7 @@ import { BackButton } from '@shared/models/back-button.model';
import { DropdownButton } from '@shared/models/dropdown-button.model';
import { MeService } from '@shared/services/me.service';
import { Subscription } from 'rxjs';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
@Component({
selector: 'app-application',
@@ -67,7 +68,7 @@ export class ApplicationDetailComponent implements OnInit, OnDestroy {
translations['APPLICATION-TABLE-ROW.SHOW-OPTIONS'];
this.titleService.setTitle(translations['TITLE.APPLICATION']);
});
- this.canEdit = this.meService.canWriteInTargetOrganization();
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.ApplicationWrite);
}
onDeleteApplication() {
diff --git a/src/app/applications/applications-list/applications-list.component.html b/src/app/applications/applications-list/applications-list.component.html
index 8e1ca4949..04da671d6 100644
--- a/src/app/applications/applications-list/applications-list.component.html
+++ b/src/app/applications/applications-list/applications-list.component.html
@@ -1,14 +1,12 @@
+ [ctaRouterLink]="'new-application'" (updatePageLimit)="updatePageLimit($event)" [canEdit]="canEdit">
\ No newline at end of file
+
diff --git a/src/app/applications/applications-list/applications-list.component.ts b/src/app/applications/applications-list/applications-list.component.ts
index 1e9bab84c..00b34de94 100644
--- a/src/app/applications/applications-list/applications-list.component.ts
+++ b/src/app/applications/applications-list/applications-list.component.ts
@@ -9,6 +9,8 @@ import { Application } from '@applications/application.model';
import { environment } from '@environments/environment';
import { TranslateService } from '@ngx-translate/core';
import { SharedVariableService } from '@shared/shared-variable/shared-variable.service';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
+import { MeService } from '@shared/services/me.service';
@Component({
providers: [NavbarComponent],
@@ -24,11 +26,13 @@ export class ApplicationsListComponent implements OnInit {
public pageOffset = 0;
public applications: Application[];
@Input() organizationId: number;
+ canEdit: boolean;
constructor(
public translate: TranslateService,
private titleService: Title,
- private globalService: SharedVariableService
+ private globalService: SharedVariableService,
+ private meService: MeService
) {
translate.use('da');
}
@@ -39,6 +43,7 @@ export class ApplicationsListComponent implements OnInit {
this.titleService.setTitle(translations['TITLE.APPLICATION']);
});
this.organizationId = this.globalService.getSelectedOrganisationId();
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.ApplicationWrite);
}
updatePageLimit(limit: any) {
diff --git a/src/app/applications/applications-list/applications-table/applications-table.component.spec.ts b/src/app/applications/applications-list/applications-table/applications-table.component.spec.ts
index 60135d748..8406c40a4 100644
--- a/src/app/applications/applications-list/applications-table/applications-table.component.spec.ts
+++ b/src/app/applications/applications-list/applications-table/applications-table.component.spec.ts
@@ -1,20 +1,20 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { ApplicationTableOtherComponent } from './applications-table.component
+import { ApplicationsTableComponent } from './applications-table.component';
describe('ApplicationTableOtherComponent', () => {
- let component: ApplicationTableOtherComponent;
- let fixture: ComponentFixture
;
+ let component: ApplicationsTableComponent;
+ let fixture: ComponentFixture;
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [ ApplicationTableOtherComponent ]
+ declarations: [ ApplicationsTableComponent ]
})
.compileComponents();
}));
beforeEach(() => {
- fixture = TestBed.createComponent(ApplicationTableOtherComponent);
+ fixture = TestBed.createComponent(ApplicationsTableComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/src/app/applications/applications-list/applications-table/applications-table.component.ts b/src/app/applications/applications-list/applications-table/applications-table.component.ts
index a459055d9..057c408ba 100644
--- a/src/app/applications/applications-list/applications-table/applications-table.component.ts
+++ b/src/app/applications/applications-list/applications-table/applications-table.component.ts
@@ -17,6 +17,7 @@ import { MeService } from '@shared/services/me.service';
import { merge, Observable, of as observableOf } from 'rxjs';
import { catchError, map, startWith, switchMap } from 'rxjs/operators';
import { DeviceType } from '@shared/enums/device-type';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
/**
* @title Table retrieving data through HTTP
@@ -50,7 +51,7 @@ export class ApplicationsTableComponent implements AfterViewInit, OnInit {
) {}
ngOnInit() {
- this.canEdit = this.meService.canWriteInTargetOrganization();
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.ApplicationWrite);
}
ngAfterViewInit() {
diff --git a/src/app/applications/bulk-import/bulk-import.component.html b/src/app/applications/bulk-import/bulk-import.component.html
index 447b772e0..466dcaf36 100644
--- a/src/app/applications/bulk-import/bulk-import.component.html
+++ b/src/app/applications/bulk-import/bulk-import.component.html
@@ -1,4 +1,4 @@
-
+
@@ -89,4 +89,4 @@
\ No newline at end of file
+
-->
diff --git a/src/app/applications/bulk-import/bulk-import.component.ts b/src/app/applications/bulk-import/bulk-import.component.ts
index 5d7a6293c..c6c1dc0bb 100644
--- a/src/app/applications/bulk-import/bulk-import.component.ts
+++ b/src/app/applications/bulk-import/bulk-import.component.ts
@@ -9,11 +9,13 @@ import {
import { IoTDeviceService } from '@applications/iot-devices/iot-device.service';
import { faDownload, faTrash } from '@fortawesome/free-solid-svg-icons';
import { TranslateService } from '@ngx-translate/core';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
import { ErrorMessageService } from '@shared/error-message.service';
import { splitList } from '@shared/helpers/array.helper';
import { Download } from '@shared/helpers/download.helper';
import { BulkImportService } from '@shared/services/bulk-import.service';
import { DownloadService } from '@shared/services/download.service';
+import { MeService } from '@shared/services/me.service';
import { Papa } from 'ngx-papaparse';
import { Observable, Subject } from 'rxjs';
import { takeWhile } from 'rxjs/operators';
@@ -57,6 +59,7 @@ export class BulkImportComponent implements OnInit {
private bulkMapper = new BulkMapping();
public backButtonTitle: string;
private applicationId;
+ canEdit: boolean;
constructor(
private papa: Papa,
@@ -66,6 +69,7 @@ export class BulkImportComponent implements OnInit {
private translate: TranslateService,
private downloads: DownloadService,
private errorMessageService: ErrorMessageService,
+ private meService: MeService,
private bulkImportService: BulkImportService
) {
this.translate.use('da');
@@ -76,6 +80,9 @@ export class BulkImportComponent implements OnInit {
this.titleService.setTitle(translations['TITLE.BULKIMPORT']);
});
this.applicationId = +this.route.snapshot.paramMap.get('id');
+ this.canEdit = this.meService.hasAccessToTargetOrganization(
+ OrganizationAccessScope.ApplicationWrite
+ );
}
download({ name, url }: { name: string; url: string }) {
diff --git a/src/app/applications/datatarget/datatarget-detail/datatarget-detail.component.html b/src/app/applications/datatarget/datatarget-detail/datatarget-detail.component.html
index 1c0c268cc..68709486e 100644
--- a/src/app/applications/datatarget/datatarget-detail/datatarget-detail.component.html
+++ b/src/app/applications/datatarget/datatarget-detail/datatarget-detail.component.html
@@ -1,3 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/app/applications/datatarget/datatarget-edit/datatarget-edit.component.html b/src/app/applications/datatarget/datatarget-edit/datatarget-edit.component.html
index bb9f14e19..c5cc8ced7 100644
--- a/src/app/applications/datatarget/datatarget-edit/datatarget-edit.component.html
+++ b/src/app/applications/datatarget/datatarget-edit/datatarget-edit.component.html
@@ -1,3 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/app/applications/datatarget/datatarget-table/datatarget-table.component.ts b/src/app/applications/datatarget/datatarget-table/datatarget-table.component.ts
index 65c049068..def5822c5 100644
--- a/src/app/applications/datatarget/datatarget-table/datatarget-table.component.ts
+++ b/src/app/applications/datatarget/datatarget-table/datatarget-table.component.ts
@@ -11,6 +11,7 @@ import { MatTableDataSource } from '@angular/material/table';
import { environment } from '@environments/environment';
import { tableSorter } from '@shared/helpers/table-sorting.helper';
import { MeService } from '@shared/services/me.service';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
@Component({
selector: 'app-datatarget-table',
@@ -25,7 +26,7 @@ export class DatatargetTableComponent implements OnInit, AfterViewInit, OnDestro
datatargets: Datatarget[];
resultsLength = 0;
public canEdit = false;
- @Input() isLoadingResults: boolean = true;
+ @Input() isLoadingResults = true;
public pageSize = environment.tablePageSize;
@Input() pageLimit: number;
@@ -48,7 +49,7 @@ export class DatatargetTableComponent implements OnInit, AfterViewInit, OnDestro
ngOnInit(): void {
this.applicationId = +Number(this.route.parent.snapshot.paramMap.get('id'));
this.getDatatarget();
- this.canEdit = this.meService.canWriteInTargetOrganization()
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.ApplicationWrite);
}
ngAfterViewInit() {
diff --git a/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.html b/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.html
index 8e895d9c8..8ff3a9d7b 100644
--- a/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.html
+++ b/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.html
@@ -1,6 +1,6 @@
+ [dropDownButton]="dropdownButton" (deleteSelectedInDropdown)="onDeleteDatatarget()" [canEdit]="canEdit">
@@ -30,11 +30,11 @@
{{ 'DATATARGET.DETAILS' | translate }}
{{ 'DATATARGET.NO-AUTHORIZATIONHEADER' | translate }}
-
+
-
-
+
+
@@ -73,4 +73,4 @@
{{ 'DATATARGET.RELATIONS' | translate }}
-
\ No newline at end of file
+
diff --git a/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.ts b/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.ts
index d56148e67..24b64bb80 100644
--- a/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.ts
+++ b/src/app/applications/datatarget/fiware/fiware-detail/fiware-detail.component.ts
@@ -12,6 +12,8 @@ import { Datatarget } from '../../datatarget.model';
import { DropdownButton } from '@shared/models/dropdown-button.model';
import { faArrowsAltH } from '@fortawesome/free-solid-svg-icons';
import { DatatargetDetail } from '@applications/datatarget/datatarget-detail/datatarget-detail';
+import { MeService } from '@shared/services/me.service';
+import { OrganizationAccessScope } from '@shared/enums/access-scopes';
@Component({
@@ -28,6 +30,7 @@ export class FiwareDetailComponent implements DatatargetDetail, OnInit, OnDestr
private deleteDialogSubscription: Subscription;
public dropdownButton: DropdownButton;
arrowsAltH = faArrowsAltH;
+ canEdit: boolean;
constructor(
private route: ActivatedRoute,
@@ -35,7 +38,8 @@ export class FiwareDetailComponent implements DatatargetDetail, OnInit, OnDestr
private location: Location,
private datatargetRelationServicer: PayloadDeviceDatatargetService,
private datatargetService: DatatargetService,
- public translate: TranslateService) { }
+ public translate: TranslateService,
+ private meService: MeService) { }
ngOnInit(): void {
const id: number = +this.route.snapshot.paramMap.get('datatargetId');
@@ -54,6 +58,7 @@ export class FiwareDetailComponent implements DatatargetDetail, OnInit, OnDestr
this.backButton.label = translations['NAV.MY-DATATARGET'];
this.dropdownButton.label = translations['DATATARGET.SHOW-OPTIONS'];
});
+ this.canEdit = this.meService.hasAccessToTargetOrganization(OrganizationAccessScope.ApplicationWrite);
}
getDatatarget(id: number) {
diff --git a/src/app/applications/datatarget/fiware/fiware-edit/fiware-edit.component.html b/src/app/applications/datatarget/fiware/fiware-edit/fiware-edit.component.html
index 02ec75295..190a208ab 100644
--- a/src/app/applications/datatarget/fiware/fiware-edit/fiware-edit.component.html
+++ b/src/app/applications/datatarget/fiware/fiware-edit/fiware-edit.component.html
@@ -1,6 +1,7 @@