From 68bb39c095e315290b02ff42c6c5397d86004aeb Mon Sep 17 00:00:00 2001 From: SebastianRoseneck <55637012+SebastianRoseneck@users.noreply.github.com> Date: Tue, 18 Jul 2023 14:43:31 +0200 Subject: [PATCH] Closes #2306 - extend Admin-UI by permissions READTASKS and EDITTASKS (#2318) --- .../access-items-management.component.html | 18 ++++-- .../workbasket-access-items.component.html | 64 +++++++++++++++---- .../workbasket-access-items.component.scss | 50 +++++++++++---- .../workbasket-access-items.component.ts | 14 +++- .../shared/models/workbasket-access-items.ts | 2 + .../forms-validator.service.ts | 13 ++++ .../obtain-message/message-by-error-code.ts | 6 ++ .../app/shared/store/mock-data/mock-store.ts | 4 ++ 8 files changed, 137 insertions(+), 34 deletions(-) diff --git a/web/src/app/administration/components/access-items-management/access-items-management.component.html b/web/src/app/administration/components/access-items-management/access-items-management.component.html index bc09173195..4ea122bfb5 100644 --- a/web/src/app/administration/components/access-items-management/access-items-management.component.html +++ b/web/src/app/administration/components/access-items-management/access-items-management.component.html @@ -49,7 +49,9 @@

Select an access id

Workbasket Key Access Id Read + Read tasks Open + Edit tasks Append Transfer Distribute @@ -97,20 +99,26 @@

Select an access id

- + - + - + - + + + + + + + - diff --git a/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.html b/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.html index 23283550da..287f331ebb 100644 --- a/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.html +++ b/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.html @@ -21,16 +21,36 @@ - AccessID - Select all - Read - Open - Append - Transfer - Distribute + AccessID + +
Select all
+ + +
Read
+ + +
Read tasks
+ + +
Open
+ + +
Edit tasks
+ + +
Append
+ + +
Transfer
+ + +
Distribute
+ - {{customField.field}} - + +
{{customField.field}}
+ + @@ -82,19 +102,35 @@ aria-labelledby="permRead" (change)="setSelectAllCheckbox(this.index, $event)"> + + + + + + + + + + @@ -102,7 +138,7 @@ @@ -110,7 +146,7 @@ @@ -119,7 +155,7 @@ diff --git a/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.scss b/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.scss index a1b02ccb23..858a632237 100644 --- a/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.scss +++ b/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.scss @@ -16,24 +16,48 @@ } &__table { - margin-top: 20px; - margin-left: auto; + margin-top: 1%; + margin-left: 1%; margin-right: auto; - width: 98%; + width: 94%; text-align: center; - & th { - padding: 0.25rem; - position: sticky; - top: 0; - z-index: 3; - background: white; + .rotated-th { + height: 80px; + min-width: 40px; + vertical-align: bottom; + padding: 0; + line-height: 0.8; + } + + .rotated-th > div { + width: 100%; + position: relative; + left: 40px; + height: 100%; + transform:skew(-45deg,0deg); + border-right: 1px solid #dee2e6; + } + + .rotated-th span { + position: absolute; + line-height: 1; + width: 80px; + left: 50%; + bottom: 0; + text-align: left; + transform:skew(45deg,0deg) rotate(315deg); + transform-origin: left center; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; } & td { - padding-left: 0.5rem; - vertical-align: initial; - border-top: 1px solid #dee2e6; + width: 40px; + vertical-align: center; + border: 1px solid #dee2e6; } & tr:first-child > td { @@ -41,7 +65,6 @@ } & td > input[type='checkbox'] { - margin-top: 0; display: block; } @@ -91,6 +114,7 @@ } .required-header { + vertical-align: bottom; width: 200px; } diff --git a/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.ts b/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.ts index 5b85a76a1c..a844b2d3b8 100644 --- a/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.ts +++ b/web/src/app/administration/components/workbasket-access-items/workbasket-access-items.component.ts @@ -113,10 +113,18 @@ export class WorkbasketAccessItemsComponent implements OnInit, OnChanges, OnDest getCustomFields(customFieldCount), tap((customFields) => { const accessItem = this.createWorkbasketAccessItems(); - this.keysOfVisibleFields = ['permRead', 'permOpen', 'permAppend', 'permTransfer', 'permDistribute']; + this.keysOfVisibleFields = [ + 'permRead', + 'permOpen', + 'permAppend', + 'permTransfer', + 'permDistribute', + 'permReadTasks', + 'permEditTasks' + ]; for (let i = 0; i < customFieldCount; i++) { if (customFields[i].visible) { - this.keysOfVisibleFields.push(Object.keys(accessItem)[i + 10]); + this.keysOfVisibleFields.push(Object.keys(accessItem)[i + 12]); } } }) @@ -242,6 +250,8 @@ export class WorkbasketAccessItemsComponent implements OnInit, OnChanges, OnDest permAppend: false, permTransfer: false, permDistribute: false, + permReadTasks: false, + permEditTasks: false, permCustom1: false, permCustom2: false, permCustom3: false, diff --git a/web/src/app/shared/models/workbasket-access-items.ts b/web/src/app/shared/models/workbasket-access-items.ts index 13a20b0e01..36236e9c3e 100644 --- a/web/src/app/shared/models/workbasket-access-items.ts +++ b/web/src/app/shared/models/workbasket-access-items.ts @@ -11,6 +11,8 @@ export interface WorkbasketAccessItems { permAppend: boolean; permTransfer: boolean; permDistribute: boolean; + permReadTasks: boolean; + permEditTasks: boolean; permCustom1: boolean; permCustom2: boolean; permCustom3: boolean; diff --git a/web/src/app/shared/services/forms-validator/forms-validator.service.ts b/web/src/app/shared/services/forms-validator/forms-validator.service.ts index 3c5e764b49..280ef0764f 100644 --- a/web/src/app/shared/services/forms-validator/forms-validator.service.ts +++ b/web/src/app/shared/services/forms-validator/forms-validator.service.ts @@ -88,6 +88,19 @@ export class FormsValidatorService { owner: responseOwner ? responseOwner.field : 'owner' }); } + + form.controls.forEach((control) => { + const { permEditTasks, permReadTasks, permRead } = control.value; + + if (permEditTasks && (!permReadTasks || !permRead)) { + this.notificationsService.showWarning('PERM_EDIT_TASKS_MISSING_DEPENDING_PERMISSION'); + } + + if (permReadTasks && !permRead) { + this.notificationsService.showWarning('PERM_READ_TASKS_MISSING_DEPENDING_PERMISSIONS'); + } + }); + return result; } diff --git a/web/src/app/shared/services/obtain-message/message-by-error-code.ts b/web/src/app/shared/services/obtain-message/message-by-error-code.ts index abc71ea76d..ce4dd4b9ca 100644 --- a/web/src/app/shared/services/obtain-message/message-by-error-code.ts +++ b/web/src/app/shared/services/obtain-message/message-by-error-code.ts @@ -103,6 +103,12 @@ export const messageByErrorCode = { }, [messageTypes.WARNING]: { + PERM_EDIT_TASKS_MISSING_DEPENDING_PERMISSION: + '"Edit tasks" permission was selected without the required "Read tasks" and "Read" permissions. ' + + 'Your changes will still be saved but they might lead to unexpected behavior.', + PERM_READ_TASKS_MISSING_DEPENDING_PERMISSIONS: + '"Read tasks" permission was selected without the required "Read" permission. ' + + 'Your changes will still be saved but they might lead to unexpected behavior.', REPORT_DATA_WRONG_HEADER: 'The received header of the Report data does not match the expected header. ' + 'The data might be displayed incorrectly. Please contact your administrator.', diff --git a/web/src/app/shared/store/mock-data/mock-store.ts b/web/src/app/shared/store/mock-data/mock-store.ts index 3d52e74575..e8253e2afe 100644 --- a/web/src/app/shared/store/mock-data/mock-store.ts +++ b/web/src/app/shared/store/mock-data/mock-store.ts @@ -139,6 +139,8 @@ export const workbasketAccessItemsMock: WorkbasketAccessItemsRepresentation = { permAppend: true, permTransfer: true, permDistribute: true, + permReadTasks: true, + permEditTasks: true, permCustom1: true, permCustom2: true, permCustom3: true, @@ -163,6 +165,8 @@ export const workbasketAccessItemsMock: WorkbasketAccessItemsRepresentation = { permAppend: true, permTransfer: true, permDistribute: false, + permReadTasks: true, + permEditTasks: true, permCustom1: true, permCustom2: true, permCustom3: true,