diff --git a/src/frontend/app/administration/user/user-administration.component.html b/src/frontend/app/administration/user/user-administration.component.html index b81d74506d97dba7e707e20594f0d57f33c595d5..bb5a3ecc067c01ad7d472c1c4cca620d459f74ae 100755 --- a/src/frontend/app/administration/user/user-administration.component.html +++ b/src/frontend/app/administration/user/user-administration.component.html @@ -174,7 +174,7 @@ <mat-form-field> <input matInput type="tel" id="phone" name="phone" title="{{lang.phoneNumber}}" placeholder="{{lang.phoneNumber}}" [(ngModel)]="user.phone" - pattern="\+?((|\ |\.|\(|\)|\-)?(\d)*)*\d$"> + pattern="\+?((|\ |\.|\(|\)|\-)?(\d)*)*\d$" [disabled]="!canManagePersonalDatas || !canViewPersonalDatas"> </mat-form-field> </div> </div> @@ -356,8 +356,8 @@ </mat-tab-group> </div> </mat-tab> - <mat-tab *ngIf="!creationMode" label="{{lang.signatures}}"> - <div dnd-droppable matTooltip="{{lang.uploadSignFileInfo}}" + <mat-tab *ngIf="!creationMode" label="{{lang.signatures}}" [disabled]="!canViewPersonalDatas"> + <div *ngIf="canManagePersonalDatas" dnd-droppable matTooltip="{{lang.uploadSignFileInfo}}" (click)="clickOnUploader('uploadSignFile')" [class.dndFileHighlighted]="highlightMe" (dragover)="highlightMe=true" (dragleave)="highlightMe=false" (onDropSuccess)="test($event);highlightMe=false;" class="dndFile"> @@ -372,10 +372,10 @@ <mat-form-field floatLabel="never"> <input matInput type="text" [(ngModel)]="signature.signature_label" name="selectedSignatureLabel" placeholder="{{lang.label}}" - (change)="updateSignature(i)"> + (change)="updateSignature(i)" [disabled]="!canManagePersonalDatas"> <button mat-button matSuffix mat-icon-button (click)="deleteSignature(signature)" color="warn" - matTooltip="{{lang.delete}}"> + matTooltip="{{lang.delete}}" [disabled]="!canManagePersonalDatas"> <mat-icon class="fa fa-times"></mat-icon> </button> </mat-form-field> @@ -386,7 +386,7 @@ </div> </div> <div> - <button *ngIf="user.signatures.length > 0" mat-icon-button color="primary" (click)="syncMP()" + <button *ngIf="user.signatures.length > 0 && canManagePersonalDatas" mat-icon-button color="primary" (click)="syncMP()" matTooltip="{{lang.syncSignsToMaarchParapheur}}" [disabled]="!user.external_id.maarchParapheur || loadingSign"> <mat-icon class="fa fa-sync-alt fa-2x" [class.fa-spin]="loadingSign"></mat-icon> diff --git a/src/frontend/app/administration/user/user-administration.component.ts b/src/frontend/app/administration/user/user-administration.component.ts index 74b340d251da6c9bfe23e32b8affe349a5c3fbe5..03a66279e0fda935b3fbd1d9c711b9db5e083a2f 100755 --- a/src/frontend/app/administration/user/user-administration.component.ts +++ b/src/frontend/app/administration/user/user-administration.component.ts @@ -15,6 +15,7 @@ import { SelectionModel } from '@angular/cdk/collections'; import { AccountLinkComponent } from './account-link/account-link.component'; import { AppService } from '../../../service/app.service'; import { MenuShortcutComponent } from '../../menu/menu-shortcut.component'; +import { PrivilegeService } from '../../../service/privileges.service'; declare function $j(selector: any): any; @@ -84,6 +85,9 @@ export class UserAdministrationComponent implements OnInit { selectedTabIndex: number = 0; maarchParapheurConnectionStatus = true; + canViewPersonalDatas: boolean = false; + canManagePersonalDatas: boolean = false; + @ViewChild('appShortcut', { static: false }) appShortcut: MenuShortcutComponent; @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; @@ -118,7 +122,8 @@ export class UserAdministrationComponent implements OnInit { public dialog: MatDialog, private headerService: HeaderService, private _formBuilder: FormBuilder, - public appService: AppService + public appService: AppService, + private privilegeService: PrivilegeService ) { $j("link[href='merged_css.php']").remove(); window['angularUserAdministrationComponent'] = { @@ -137,6 +142,8 @@ export class UserAdministrationComponent implements OnInit { this.headerService.setHeader(this.lang.userCreation); this.creationMode = true; + this.canViewPersonalDatas = true; + this.canManagePersonalDatas = true; this.loading = false; } else { window['MainHeaderComponent'].setSnav(this.sidenavLeft); @@ -148,6 +155,18 @@ export class UserAdministrationComponent implements OnInit { .subscribe((data: any) => { this.user = data; + if (this.headerService.user.id === this.user.id) { + this.canViewPersonalDatas = true; + this.canManagePersonalDatas = true; + } else { + this.canViewPersonalDatas = this.privilegeService.hasCurrentUserPrivilege('view_personal_data'); + this.canManagePersonalDatas = this.privilegeService.hasCurrentUserPrivilege('manage_personal_data'); + } + + + if (!this.canViewPersonalDatas) { + this.user.phone = '****'; + } this.data = data.history; this.userId = data.user_id; this.minDate = new Date(this.CurrentYear + '-' + this.currentMonth + '-01'); diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 5e96bca2ed96b644e8f86bc47b2936e2bbce7a4b..d2557ca0b339c1c1226383cb7f4b7ec48867ae75 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1299,4 +1299,5 @@ export const LANG_EN = { "reallyWantToDeleteThisGroup" : "Do you really want to remove this group ?", "contact_entity" : "Entity", "contact_third" : "Contact third", + "confidentialityAndSecurity" : "Confidentiality and security", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 8e39059ba0976c0a8785f4d95c47cd71bb69bc78..f1dc93e4d24f22ffc98269c0c1b3c1c5b7941443 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1337,4 +1337,5 @@ export const LANG_FR = { "invalidToken" : "Le jeton est expiré ou n'existe plus", "contact_entity" : "Entité", "contact_third" : "Tier bénéficiaire", + "confidentialityAndSecurity" : "Vie privée et sécurité", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index 6de2e03b5b04487b85ad123e0b05f1e95d0cb928..4ab77ef1f3741491e840fd752533e42844246371 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1324,4 +1324,5 @@ export const LANG_NL = { "reallyWantToDeleteThisGroup" : "Do you really want to remove this group ?", //_TO_TRANSLATE "contact_entity" : "Entity", //_TO_TRANSLATE "contact_third" : "Contact third", //_TO_TRANSLATE + "confidentialityAndSecurity" : "Confidentiality and security", //_TO_TRANSLATE }; diff --git a/src/frontend/service/privileges.service.ts b/src/frontend/service/privileges.service.ts index ea1fbfddf4f04f47de184d9d1c1044681e6ba963..a6179ac880b01299a4aaaab1a9c523fcc755a9b6 100644 --- a/src/frontend/service/privileges.service.ts +++ b/src/frontend/service/privileges.service.ts @@ -444,13 +444,13 @@ export class PrivilegeService { "id": "view_personal_data", "label": this.lang.viewPersonalData, "comment": this.lang.viewPersonalData, - "unit": 'application' + "unit": 'confidentialityAndSecurity' }, { "id": "manage_personal_data", "label": this.lang.managePersonalData, "comment": this.lang.managePersonalData, - "unit": 'application' + "unit": 'confidentialityAndSecurity' } ];