@valtimo/access-control-management 13.34.0 → 13.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -891,7 +891,7 @@ class AccessControlJsonEditorTabComponent {
891
891
  }
892
892
  }
893
893
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: AccessControlJsonEditorTabComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i2$1.IconService }, { token: PermissionSchemaMetadataService }, { token: i1$2.Router }, { token: i4$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
894
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: AccessControlJsonEditorTabComponent, isStandalone: true, selector: "valtimo-access-control-json-editor-tab", inputs: { disabled: "disabled", model: "model" }, outputs: { validEvent: "validEvent", valueChangeEvent: "valueChangeEvent" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n filteredModel: filteredModel$ | async,\n editorDisabled: editorDisabled$ | async,\n permissionSchema: permissionSchema$ | async,\n } as obs\"\n class=\"json-editor-tab\"\n>\n <div class=\"json-editor-tab__toolbar\">\n <v-overflow-menu placement=\"bottom-end\" [closeOnSelect]=\"false\">\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n class=\"json-editor-tab__filter-trigger\"\n [class.json-editor-tab__filter-trigger--active]=\"isFilterActive$ | async\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"filterPane\"></ng-container>\n </div>\n </v-overflow-menu>\n </div>\n\n <valtimo-editor\n *ngIf=\"obs.permissionSchema\"\n [disabled]=\"obs.editorDisabled || disabled\"\n [fitPage]=\"true\"\n [jsonSchema]=\"obs.permissionSchema\"\n [model]=\"obs.filteredModel\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-editor>\n</div>\n\n<ng-template #filterPane>\n <form class=\"json-editor-tab__filter\" (click)=\"$event.stopImmediatePropagation()\">\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.resourceType' | translate\"\n [placeholder]=\"'accessControl.filter.allResourceTypes' | translate\"\n (selected)=\"onResourceTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"resourceTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.action' | translate\"\n [placeholder]=\"'accessControl.filter.allActions' | translate\"\n (selected)=\"onActionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"actionItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n</ng-template>\n", styles: [":host{display:block;height:100%}.json-editor-tab{display:flex;flex-direction:column;height:100%}.json-editor-tab__toolbar{display:flex;justify-content:flex-end;padding:.25rem 0}.json-editor-tab__filter-trigger{position:relative}.json-editor-tab__filter-trigger--active:after{content:\"\";position:absolute;top:.375rem;right:.375rem;width:.5rem;height:.5rem;border-radius:50%;background-color:var(--cds-support-info, #0f62fe)}.json-editor-tab__filter{display:flex;flex-direction:column;gap:1rem;padding:1rem;min-width:16rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i2$1.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i2$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i3.EditorComponent, selector: "valtimo-editor", inputs: ["editorOptions", "model", "disabled", "formatOnLoad", "widthPx", "heightPx", "heightStyle", "jsonSchema", "fitPage", "fitPageSpaceAdjustment"], outputs: ["validEvent", "valueChangeEvent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: AccessControlJsonEditorTabComponent, isStandalone: true, selector: "valtimo-access-control-json-editor-tab", inputs: { disabled: "disabled", model: "model" }, outputs: { validEvent: "validEvent", valueChangeEvent: "valueChangeEvent" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n filteredModel: filteredModel$ | async,\n editorDisabled: editorDisabled$ | async,\n permissionSchema: permissionSchema$ | async,\n } as obs\"\n class=\"json-editor-tab\"\n>\n <div class=\"json-editor-tab__toolbar\">\n <v-overflow-menu placement=\"bottom-end\" [closeOnSelect]=\"false\">\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n class=\"json-editor-tab__filter-trigger\"\n [class.json-editor-tab__filter-trigger--active]=\"isFilterActive$ | async\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"filterPane\"></ng-container>\n </div>\n </v-overflow-menu>\n </div>\n\n <valtimo-editor\n *ngIf=\"obs.permissionSchema\"\n [disabled]=\"obs.editorDisabled || disabled\"\n [fitPage]=\"true\"\n [jsonSchema]=\"obs.permissionSchema\"\n [model]=\"obs.filteredModel\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-editor>\n</div>\n\n<ng-template #filterPane>\n <form class=\"json-editor-tab__filter\" (click)=\"$event.stopImmediatePropagation()\">\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.resourceType' | translate\"\n [placeholder]=\"'accessControl.filter.allResourceTypes' | translate\"\n (selected)=\"onResourceTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"resourceTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.action' | translate\"\n [placeholder]=\"'accessControl.filter.allActions' | translate\"\n (selected)=\"onActionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"actionItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n</ng-template>\n", styles: [":host{display:block;height:100%}.json-editor-tab{display:flex;flex-direction:column;height:100%}.json-editor-tab__toolbar{display:flex;justify-content:flex-end;padding:.25rem 0}.json-editor-tab__filter-trigger{position:relative}.json-editor-tab__filter-trigger--active:after{content:\"\";position:absolute;top:.375rem;right:.375rem;width:.5rem;height:.5rem;border-radius:50%;background-color:var(--cds-support-info, #0f62fe)}.json-editor-tab__filter{display:flex;flex-direction:column;gap:1rem;padding:1rem;min-width:16rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i2$1.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i2$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i3.EditorComponent, selector: "valtimo-editor", inputs: ["editorOptions", "model", "disabled", "formatOnLoad", "widthPx", "heightPx", "heightStyle", "jsonSchema", "fitPage"], outputs: ["validEvent", "valueChangeEvent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
895
895
  }
896
896
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: AccessControlJsonEditorTabComponent, decorators: [{
897
897
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"valtimo-access-control-management.mjs","sources":["../../../../projects/valtimo/access-control-management/src/lib/models/access-control-editor-tab.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/permission.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/permission-schema.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/role.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/index.ts","../../../../projects/valtimo/access-control-management/src/lib/services/access-control.service.ts","../../../../projects/valtimo/access-control-management/src/lib/services/permission-schema-metadata.service.ts","../../../../projects/valtimo/access-control-management/src/lib/services/index.ts","../../../../projects/valtimo/access-control-management/src/lib/services/access-control-export.service.ts","../../../../projects/valtimo/access-control-management/src/lib/components/role-metadata-modal/role-metadata-modal.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/role-metadata-modal/role-metadata-modal.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/delete-role-modal/delete-role-modal.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/delete-role-modal/delete-role-modal.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/export-role-modal/export-role-modal.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/export-role-modal/export-role-modal.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/overview/access-control-overview.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/overview/access-control-overview.component.html","../../../../projects/valtimo/access-control-management/src/lib/constants/access-control-labels.ts","../../../../projects/valtimo/access-control-management/src/lib/constants/index.ts","../../../../projects/valtimo/access-control-management/src/lib/utils/format-condition.ts","../../../../projects/valtimo/access-control-management/src/lib/utils/index.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-json-editor-tab/access-control-json-editor-tab.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-json-editor-tab/access-control-json-editor-tab.component.html","../../../../projects/valtimo/access-control-management/src/lib/pipes/resource-type-label.pipe.ts","../../../../projects/valtimo/access-control-management/src/lib/pipes/index.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-overview-tab/access-control-overview-tab.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-overview-tab/access-control-overview-tab.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/editor/access-control-editor.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/editor/access-control-editor.component.html","../../../../projects/valtimo/access-control-management/src/lib/access-control-management-routing.module.ts","../../../../projects/valtimo/access-control-management/src/lib/access-control-management.module.ts","../../../../projects/valtimo/access-control-management/src/public-api.ts","../../../../projects/valtimo/access-control-management/src/valtimo-access-control-management.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nenum AccessControlEditorTab {\n SUMMARY = 'summary',\n JSON_EDITOR = 'jsonEditor',\n}\n\ninterface AccessControlFilter {\n resourceType: string | null;\n action: string | null;\n}\n\nexport {AccessControlEditorTab, AccessControlFilter};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype ConditionOperator = '==' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'list_contains';\n\ninterface FieldCondition {\n type: 'field';\n field: string;\n operator: ConditionOperator;\n value: unknown;\n}\n\ninterface ExpressionCondition {\n type: 'expression';\n field: string;\n path: string;\n operator: ConditionOperator;\n value: unknown;\n clazz: string;\n}\n\ninterface ContainerCondition {\n type: 'container';\n resourceType: string;\n conditions: PermissionCondition[];\n}\n\ntype PermissionCondition = FieldCondition | ExpressionCondition | ContainerCondition;\n\ninterface Permission {\n resourceType: string;\n action?: string;\n actions?: string[];\n roleKey: string;\n conditions?: PermissionCondition[];\n contextResourceType?: string;\n contextConditions?: PermissionCondition[];\n}\n\ninterface ResourcePermissionGroup {\n resourceType: string;\n permissions: Permission[];\n}\n\nexport {\n ConditionOperator,\n ContainerCondition,\n ExpressionCondition,\n FieldCondition,\n Permission,\n PermissionCondition,\n ResourcePermissionGroup,\n};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// JSON Schema returned by GET /api/management/v1/permissions/schema. Passed to the Monaco\n// JSON editor (via valtimo-editor [jsonSchema]) to drive validation and autocomplete.\ntype PermissionSchema = object;\n\ninterface SchemaAllOfBranch {\n if?: {properties?: {resourceType?: {const?: string}}};\n then?: {properties?: {action?: {enum?: string[]}}};\n}\n\ninterface SchemaOneOfEntry {\n const?: string;\n}\n\ninterface SchemaCondListVariant {\n allOf?: Array<{$ref?: string; properties?: {field?: {enum?: string[]}}}>;\n}\n\ninterface SchemaCondListDefinition {\n items?: {oneOf?: SchemaCondListVariant[]};\n}\n\ninterface SchemaShape {\n items?: {\n allOf?: SchemaAllOfBranch[];\n properties?: {resourceType?: {oneOf?: SchemaOneOfEntry[]}};\n };\n definitions?: Record<string, SchemaCondListDefinition>;\n}\n\nexport {PermissionSchema, SchemaShape};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface Role {\n roleKey: string;\n}\n\ninterface DeleteRolesRequest {\n roles: Array<string>;\n}\n\ntype RoleMetadataModal = 'add' | 'edit';\n\ntype RoleExport = 'unified' | 'separate';\n\ninterface ExportRoleOutput {\n roleKeys: Array<string>;\n type: RoleExport;\n}\n\nexport {Role, DeleteRolesRequest, RoleMetadataModal, RoleExport, ExportRoleOutput};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './access-control-editor-tab.model';\nexport * from './permission.model';\nexport * from './permission-schema.model';\nexport * from './role.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {DeleteRolesRequest, Permission, PermissionSchema, Role} from '../models';\n\n@Injectable({providedIn: 'root'})\nexport class AccessControlService {\n public readonly roles$ = new BehaviorSubject<Role[]>([]);\n public readonly loading$ = new BehaviorSubject<boolean>(false);\n\n private valtimoEndpointUri: string;\n\n private get roleDtos$(): Observable<Role[]> {\n return this.http.get<Role[]>(`${this.valtimoEndpointUri}v1/roles`);\n }\n\n constructor(\n private readonly configService: ConfigService,\n private readonly http: HttpClient\n ) {\n this.valtimoEndpointUri = `${this.configService.config.valtimoApi.endpointUri}management/`;\n }\n\n public addRole(role: Role): Observable<Role> {\n return this.http.post<Role>(`${this.valtimoEndpointUri}v1/roles`, role);\n }\n\n public deleteRoles(request: DeleteRolesRequest): Observable<null> {\n return this.http.delete<null>(`${this.valtimoEndpointUri}v1/roles`, {body: request});\n }\n\n public dispatchAction(actionResult: Observable<Role | null>): void {\n actionResult\n .pipe(\n tap(() => {\n this.loading$.next(true);\n }),\n switchMap(() => this.roleDtos$),\n take(1),\n catchError(error => of(error))\n )\n .subscribe({\n next: (roles: Role[]) => {\n this.roles$.next(roles);\n this.loading$.next(false);\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n public loadRoles(): void {\n this.roleDtos$\n .pipe(\n tap(() => {\n this.loading$.next(true);\n }),\n take(1)\n )\n .subscribe({\n next: (items: Role[]) => {\n this.roles$.next(items);\n this.loading$.next(false);\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n public getRolePermissions(roleKey: string): Observable<Permission[]> {\n return this.http.get<Permission[]>(\n `${this.valtimoEndpointUri}v1/roles/${roleKey}/permissions`\n );\n }\n\n public exportRolePermissions(roles: string[]): Observable<object[]> {\n return this.http.post<object[]>(`${this.valtimoEndpointUri}v1/permissions/search`, {roles});\n }\n\n public updateRolePermissions(roleKey: string, updatedPermission: object): Observable<object> {\n return this.http.put<object>(\n `${this.valtimoEndpointUri}v1/roles/${roleKey}/permissions`,\n updatedPermission\n );\n }\n\n public getPermissionSchema(): Observable<PermissionSchema> {\n return this.http.get<PermissionSchema>(`${this.valtimoEndpointUri}v1/permissions/schema`);\n }\n\n public updateRole(roleKey: string, request: Role): Observable<object> {\n return this.http.put<object>(`${this.valtimoEndpointUri}v1/roles/${roleKey}`, request);\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {BehaviorSubject, map, Observable, shareReplay, tap} from 'rxjs';\nimport {PermissionSchema, SchemaShape} from '../models';\nimport {AccessControlService} from './access-control.service';\n\n@Injectable({providedIn: 'root'})\nexport class PermissionSchemaMetadataService {\n private readonly _knownResourceTypes$ = new BehaviorSubject<Set<string>>(new Set());\n private readonly _fieldsByResourceType$ = new BehaviorSubject<Record<string, Set<string>>>({});\n\n public readonly schema$: Observable<PermissionSchema> = this.accessControlService\n .getPermissionSchema()\n .pipe(\n tap(schema => {\n this._knownResourceTypes$.next(this.extractKnownResourceTypes(schema));\n this._fieldsByResourceType$.next(this.extractFieldsByResourceType(schema));\n }),\n shareReplay({bufferSize: 1, refCount: false})\n );\n\n public readonly actionsByResourceType$: Observable<Record<string, string[]>> =\n this.schema$.pipe(map(schema => this.extractActionsByResourceType(schema)));\n\n public readonly allResourceTypes$: Observable<string[]> = this.actionsByResourceType$.pipe(\n map(actions => Object.keys(actions))\n );\n\n constructor(private readonly accessControlService: AccessControlService) {}\n\n public isResourceTypeKnown(fqn: string): boolean {\n return this._knownResourceTypes$.value.has(fqn);\n }\n\n public isFieldKnown(resourceType: string, field: string): boolean {\n return this._fieldsByResourceType$.value[resourceType]?.has(field) ?? false;\n }\n\n private extractActionsByResourceType(schema: PermissionSchema): Record<string, string[]> {\n const branches = (schema as SchemaShape)?.items?.allOf ?? [];\n const result: Record<string, string[]> = {};\n for (const branch of branches) {\n const resourceType = branch?.if?.properties?.resourceType?.const;\n const actions = branch?.then?.properties?.action?.enum;\n if (resourceType && Array.isArray(actions)) {\n result[resourceType] = [...actions];\n }\n }\n return result;\n }\n\n private extractKnownResourceTypes(schema: PermissionSchema): Set<string> {\n const entries = (schema as SchemaShape)?.items?.properties?.resourceType?.oneOf ?? [];\n const result = new Set<string>();\n for (const entry of entries) {\n if (entry?.const) result.add(entry.const);\n }\n return result;\n }\n\n private extractFieldsByResourceType(schema: PermissionSchema): Record<string, Set<string>> {\n const definitions = (schema as SchemaShape)?.definitions ?? {};\n const result: Record<string, Set<string>> = {};\n for (const [key, def] of Object.entries(definitions)) {\n if (!key.startsWith('condList.')) continue;\n const resourceType = key.substring('condList.'.length);\n const fields = new Set<string>();\n for (const variant of def?.items?.oneOf ?? []) {\n for (const part of variant?.allOf ?? []) {\n for (const f of part?.properties?.field?.enum ?? []) fields.add(f);\n }\n }\n result[resourceType] = fields;\n }\n return result;\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './access-control.service';\nexport * from './permission-schema-metadata.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {AccessControlService} from './access-control.service';\nimport {ExportRoleOutput, RoleExport} from '../models';\nimport {catchError, combineLatest, map, Observable, of, tap} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class AccessControlExportService {\n constructor(private readonly accessControlService: AccessControlService) {}\n\n public exportRoles(event: ExportRoleOutput): Observable<boolean> {\n return (\n event.type === 'unified'\n ? this.accessControlService.exportRolePermissions(event.roleKeys).pipe(\n tap(res => {\n this.downloadJson(res, event.type);\n })\n )\n : combineLatest(\n event.roleKeys.map((roleKey: string) =>\n this.accessControlService.exportRolePermissions([roleKey])\n )\n ).pipe(\n tap(res => {\n res.forEach((permissions, index) => {\n const roleKey = event.roleKeys[index];\n this.downloadJson(permissions, event.type, roleKey);\n });\n })\n )\n ).pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n\n private downloadJson(permissions: Array<object>, type: RoleExport, roleKey?: string): void {\n const sJson = JSON.stringify({permissions}, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(sJson));\n element.setAttribute(\n 'download',\n `${type === 'separate' ? roleKey : 'combined'}.permission.json`\n );\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click(); // simulate click\n document.body.removeChild(element);\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {Role, RoleMetadataModal} from '../../models';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\n\n@Component({\n standalone: false,\n selector: 'valtimo-role-metadata-modal',\n templateUrl: './role-metadata-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoleMetadataModalComponent {\n @Input() open = false;\n @Input() type: RoleMetadataModal = 'add';\n @Input() set defaultKeyValue(value: string) {\n this._defaultKeyValue = value;\n this.setDefaultKeyValue(value);\n }\n @Output() closeEvent = new EventEmitter<Role | null>();\n\n public form = this.fb.group({\n key: this.fb.control('', Validators.required),\n });\n\n private _defaultKeyValue!: string;\n\n public get key() {\n return this.form?.get('key');\n }\n\n constructor(private readonly fb: FormBuilder) {}\n\n public onCancel(): void {\n this.closeEvent.emit(null);\n this.resetForm();\n }\n\n public onConfirm(): void {\n if (!this.key) {\n return;\n }\n\n this.closeEvent.emit({roleKey: this.key.value});\n this.resetForm();\n }\n\n private setDefaultKeyValue(value: string) {\n this.key.setValue(value);\n }\n\n private resetForm(): void {\n setTimeout(() => {\n this.form.reset();\n if (this.type === 'edit') {\n this.setDefaultKeyValue(this._defaultKeyValue);\n }\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{\n isAdd: type === 'add',\n } as vars\"\n [open]=\"open\"\n showFooter=\"true\"\n [title]=\"vars.title\"\n valtimoCdsModal\n (close)=\"onCancel()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{\n vars.isAdd\n ? ('accessControl.roles.add' | translate)\n : ('accessControl.roles.editRole' | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\">\n <cds-label [invalid]=\"key.dirty && key.invalid\">\n {{ 'accessControl.roles.name' | translate }}\n\n <input\n formControlName=\"key\"\n cdsText\n placeholder=\"{{ 'accessControl.roles.name' | translate }}\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"key.dirty && key.invalid\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button [disabled]=\"this.form.invalid\" (click)=\"onConfirm()\" cdsButton=\"primary\">\n {{ vars.isAdd ? ('interface.create' | translate) : ('interface.save' | translate) }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Observable} from 'rxjs';\n\n@Component({\n standalone: false,\n selector: 'valtimo-delete-role-modal',\n templateUrl: './delete-role-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DeleteRoleModalComponent {\n @Input() deleteRowKeys: Array<string>;\n @Input() showDeleteModal$: Observable<boolean>;\n @Output() deleteEvent = new EventEmitter<Array<string>>();\n\n public onDelete(roles: Array<string>): void {\n this.deleteEvent.emit(roles);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"accessControl.roles.deleteModalContent\"\n [outputOnConfirm]=\"deleteRowKeys\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport {ExportRoleOutput, RoleExport} from '../../models';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\n\n@Component({\n standalone: false,\n selector: 'valtimo-export-role-modal',\n templateUrl: './export-role-modal.component.html',\n styleUrls: ['./export-role-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExportRoleModalComponent implements OnInit, OnDestroy {\n @Input() open = false;\n @Input() exportRowKeys: Array<string>;\n @Input() reset$!: Observable<null>;\n @Input() disabled: boolean;\n\n @Output() exportEvent = new EventEmitter<ExportRoleOutput>();\n @Output() closeEvent = new EventEmitter<any>();\n\n public readonly selectedType$ = new BehaviorSubject<RoleExport | null>(null);\n\n private _resetSubscription!: Subscription;\n\n public ngOnInit(): void {\n this.openResetSubscription();\n }\n\n public ngOnDestroy(): void {\n this._resetSubscription?.unsubscribe();\n }\n\n public onCancel(): void {\n if (!this.disabled) {\n this.resetType();\n this.closeEvent.emit();\n }\n }\n\n public onConfirm(type: RoleExport): void {\n this.exportEvent.emit({type, roleKeys: this.exportRowKeys});\n }\n\n public selectType(type: RoleExport): void {\n this.selectedType$.next(type);\n }\n\n private resetType(): void {\n setTimeout(() => {\n this.selectedType$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n private openResetSubscription(): void {\n this._resetSubscription = this.reset$?.subscribe(() => {\n this.closeEvent.emit();\n this.resetType();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{title: ('interface.export' | translate), selectedType: selectedType$ | async} as vars\"\n valtimoCdsModal\n [open]=\"open\"\n size=\"sm\"\n showFooter=\"true\"\n [title]=\"vars.title\"\n (close)=\"onCancel()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ vars.title }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <div class=\"export-buttons\">\n <button [disabled]=\"disabled\" cdsButton=\"secondary\" (click)=\"selectType('unified')\">\n {{ 'accessControl.roles.singleExport' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"document\" size=\"16\"></svg>\n </button>\n\n <button [disabled]=\"disabled\" cdsButton=\"secondary\" (click)=\"selectType('separate')\">\n {{ 'accessControl.roles.multipleExport' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"copy--file\" size=\"16\"></svg>\n </button>\n </div>\n </section>\n\n <cds-modal-footer>\n <button [disabled]=\"disabled\" cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n [disabled]=\"!vars.selectedType || disabled\"\n cdsButton=\"primary\"\n (click)=\"onConfirm(vars.selectedType)\"\n >\n {{ vars.title }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ChangeDetectionStrategy, Component, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {CARBON_CONSTANTS, CarbonListComponent, ColumnConfig, ViewType} from '@valtimo/components';\nimport {BehaviorSubject, delay, finalize, Observable, Subject, tap} from 'rxjs';\nimport {ExportRoleOutput, Role} from '../../models';\nimport {AccessControlExportService} from '../../services/access-control-export.service';\nimport {AccessControlService} from '../../services/access-control.service';\n\n@Component({\n standalone: false,\n templateUrl: './access-control-overview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccessControlOverviewComponent implements OnInit {\n @ViewChild(CarbonListComponent) carbonList: CarbonListComponent;\n\n public fields: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'roleKey',\n label: 'accessControl.roles.key',\n },\n ];\n\n public readonly roles$: Observable<Role[]> = this.accessControlService.roles$;\n public readonly loading$: Observable<boolean> = this.accessControlService.loading$;\n public readonly skeleton$ = new BehaviorSubject<boolean>(false);\n public readonly showAddModal$ = new BehaviorSubject<boolean>(false);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly showExportModal$ = new BehaviorSubject<boolean>(false);\n public readonly selectedRowKeys$ = new BehaviorSubject<Array<string>>([]);\n public readonly resetExportType$ = new Subject<null>();\n public readonly exportDisabled$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n private readonly accessControlService: AccessControlService,\n private readonly accessControlExportService: AccessControlExportService,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n this.accessControlService.loadRoles();\n }\n\n public openAddModal(): void {\n this.showAddModal$.next(true);\n }\n\n public onAdd(data: Role | null): void {\n this.showAddModal$.next(false);\n\n if (!data) {\n return;\n }\n\n this.accessControlService.dispatchAction(\n this.accessControlService.addRole(data).pipe(\n finalize(() => {\n this.showAddModal$.next(false);\n })\n )\n );\n }\n\n public showDeleteModal(): void {\n this.setSelectedRoleKeys();\n this.showDeleteModal$.next(true);\n }\n\n public showExportModal(): void {\n this.setSelectedRoleKeys();\n this.showExportModal$.next(true);\n }\n\n public closeExportModal(): void {\n this.showExportModal$.next(false);\n }\n\n public onDelete(roles: Array<string>): void {\n this.enableSkeleton();\n\n this.accessControlService.dispatchAction(\n this.accessControlService.deleteRoles({roles}).pipe(\n finalize(() => {\n this.disableSkeleton();\n })\n )\n );\n }\n\n public onExport(event: ExportRoleOutput): void {\n this.exportDisabled$.next(true);\n\n this.accessControlExportService\n .exportRoles(event)\n .pipe(\n tap(() => {\n this.resetExportType$.next(null);\n }),\n delay(CARBON_CONSTANTS.modalAnimationMs),\n tap(() => {\n this.exportDisabled$.next(false);\n })\n )\n .subscribe();\n }\n\n public onRowClick(role: Role): void {\n this.router.navigate([`/access-control/${role.roleKey}`]);\n }\n\n private enableSkeleton(): void {\n this.skeleton$.next(true);\n }\n\n private disableSkeleton(): void {\n this.skeleton$.next(false);\n }\n\n private setSelectedRoleKeys(): void {\n this.selectedRowKeys$.next(this.carbonList.selectedItems.map((role: Role) => role.roleKey));\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n [header]=\"false\"\n [items]=\"roles$ | async\"\n [fields]=\"fields\"\n [loading]=\"loading$ | async\"\n [showSelectionColumn]=\"true\"\n (rowClicked)=\"onRowClick($event)\"\n>\n <ng-container header> {{ 'accessControl.roles.title' | translate }} </ng-container>\n\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addRoleButton\"></ng-container>\n </div>\n\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showDeleteModal()\">\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n\n <button cdsButton=\"primary\" (click)=\"showExportModal()\">\n {{ 'interface.export' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addRoleButton\"\n description=\"{{ 'accessControl.roles.noResults.description' | translate }}\"\n title=\"{{ 'accessControl.roles.noResults.title' | translate }}\"\n ></valtimo-no-results>\n</valtimo-carbon-list>\n\n<valtimo-role-metadata-modal\n [open]=\"showAddModal$ | async\"\n (closeEvent)=\"onAdd($event)\"\n></valtimo-role-metadata-modal>\n\n<ng-container *ngIf=\"{selectedRowKeys: selectedRowKeys$ | async} as obs\">\n <valtimo-delete-role-modal\n [deleteRowKeys]=\"obs.selectedRowKeys\"\n [showDeleteModal$]=\"showDeleteModal$\"\n (deleteEvent)=\"onDelete($event)\"\n >\n </valtimo-delete-role-modal>\n\n <valtimo-export-role-modal\n [disabled]=\"exportDisabled$ | async\"\n [exportRowKeys]=\"obs.selectedRowKeys\"\n [open]=\"showExportModal$ | async\"\n [reset$]=\"resetExportType$\"\n (exportEvent)=\"onExport($event)\"\n (closeEvent)=\"closeExportModal()\"\n >\n </valtimo-export-role-modal>\n</ng-container>\n\n<ng-template #addRoleButton>\n <button cdsButton=\"primary\" (click)=\"openAddModal()\">\n {{ 'accessControl.roles.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ConditionOperator} from '../models';\n\nconst OPERATOR_LABEL: Record<ConditionOperator, string> = {\n '==': 'accessControl.overview.operators.eq',\n '!=': 'accessControl.overview.operators.neq',\n '>': 'accessControl.overview.operators.gt',\n '>=': 'accessControl.overview.operators.gte',\n '<': 'accessControl.overview.operators.lt',\n '<=': 'accessControl.overview.operators.lte',\n in: 'accessControl.overview.operators.in',\n list_contains: 'accessControl.overview.operators.list_contains',\n};\n\nconst NO_CONTEXT_RESOURCE_TYPE = 'com.ritense.authorization.NoContext';\n\nexport {NO_CONTEXT_RESOURCE_TYPE, OPERATOR_LABEL};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './access-control-labels';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {TranslateService} from '@ngx-translate/core';\nimport {OPERATOR_LABEL} from '../constants';\nimport {ConditionOperator} from '../models';\n\nconst SPECIAL_VALUE_PATTERN = /^\\$\\{([A-Za-z_$][A-Za-z0-9_$]*)\\}$/;\n\nfunction lowerFirst(s: string): string {\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n\nfunction upperFirst(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction resourceTypeI18nKey(fqn: string): string | null {\n const lastSegment = fqn.split('.').pop();\n if (!lastSegment) return null;\n return `accessControl.resourceTypes.${lowerFirst(lastSegment)}`;\n}\n\nfunction fieldI18nKey(resourceType: string, field: string): string | null {\n const resourceSegment = resourceType.split('.').pop();\n if (!resourceSegment || !field) return null;\n const fieldSegment = field\n .split('.')\n .map((part, i) => (i === 0 ? part : upperFirst(part)))\n .join('');\n return `accessControl.overview.fields.${lowerFirst(resourceSegment)}.${fieldSegment}`;\n}\n\nfunction tryTranslate(translate: TranslateService, key: string): string | null {\n const translated = translate.instant(key);\n return translated === key ? null : translated;\n}\n\nfunction formatResourceType(translate: TranslateService, fqn: string): string {\n const key = resourceTypeI18nKey(fqn);\n const translated = key ? tryTranslate(translate, key) : null;\n if (translated !== null) return translated;\n const segments = fqn.split('.');\n return segments[segments.length - 1] || fqn;\n}\n\nfunction formatField(translate: TranslateService, resourceType: string, field: string): string {\n const key = fieldI18nKey(resourceType, field);\n const translated = key ? tryTranslate(translate, key) : null;\n if (translated !== null) return translated;\n return humanizeFieldPath(field);\n}\n\nfunction formatOperator(translate: TranslateService, operator: ConditionOperator): string {\n const key = OPERATOR_LABEL[operator];\n return key ? translate.instant(key) : operator;\n}\n\nfunction formatValue(translate: TranslateService, value: unknown): string {\n if (value === null) {\n return translate.instant('accessControl.overview.specialValues.null');\n }\n if (typeof value === 'string') {\n if (value === '') return translate.instant('accessControl.overview.specialValues.empty');\n const match = SPECIAL_VALUE_PATTERN.exec(value);\n if (match) {\n const key = `accessControl.overview.specialValues.${match[1]}`;\n const translated = tryTranslate(translate, key);\n if (translated !== null) return translated;\n }\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(item => formatValue(translate, item)).join(', ');\n }\n return String(value);\n}\n\nfunction humanizeFieldPath(field: string): string {\n return field\n .split('.')\n .map(part => part.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase())\n .join(' ');\n}\n\nexport {formatField, formatOperator, formatResourceType, formatValue, humanizeFieldPath};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './format-condition';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {EditorModel, EditorModule, OverflowMenuComponent} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n IconService,\n ListItem,\n} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, map, Observable, skip, Subscription, take} from 'rxjs';\nimport {AccessControlFilter, Permission, PermissionSchema} from '../../models';\nimport {PermissionSchemaMetadataService} from '../../services';\nimport {formatResourceType} from '../../utils';\n\n@Component({\n standalone: true,\n selector: 'valtimo-access-control-json-editor-tab',\n templateUrl: './access-control-json-editor-tab.component.html',\n styleUrls: ['./access-control-json-editor-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n EditorModule,\n IconModule,\n OverflowMenuComponent,\n ],\n})\nexport class AccessControlJsonEditorTabComponent implements OnInit, OnChanges, OnDestroy {\n @Input() public disabled: boolean | null = false;\n @Input() public model!: EditorModel;\n\n @Output() public validEvent = new EventEmitter<boolean>();\n @Output() public valueChangeEvent = new EventEmitter<string>();\n\n private readonly _sourceModel$ = new BehaviorSubject<EditorModel | null>(null);\n private readonly _filter$ = new BehaviorSubject<AccessControlFilter>({\n resourceType: null,\n action: null,\n });\n private readonly _subscriptions = new Subscription();\n\n public readonly isFilterActive$: Observable<boolean> = this._filter$.pipe(\n map(({resourceType, action}) => !!resourceType || !!action)\n );\n\n public readonly resourceTypeItems$: Observable<ListItem[]> = combineLatest([\n this._sourceModel$,\n this._filter$,\n ]).pipe(\n map(([sourceModel, currentFilter]) => {\n const permissions = this.parsePermissions(sourceModel);\n const resourceTypes = Array.from(\n new Set(permissions.map(p => p.resourceType).filter(Boolean))\n ).sort();\n\n return resourceTypes.map(resourceType => ({\n content: formatResourceType(this.translateService, resourceType),\n resourceType,\n selected: currentFilter.resourceType === resourceType,\n }));\n })\n );\n\n public readonly actionItems$: Observable<ListItem[]> = combineLatest([\n this._sourceModel$,\n this._filter$,\n ]).pipe(\n map(([sourceModel, currentFilter]) => {\n const permissions = this.parsePermissions(sourceModel);\n const scoped = currentFilter.resourceType\n ? permissions.filter(p => p.resourceType === currentFilter.resourceType)\n : permissions;\n const actions = Array.from(\n new Set(\n scoped.flatMap(p => [...(p.actions ?? []), ...(p.action ? [p.action] : [])])\n )\n ).sort();\n\n return actions.map(action => ({\n content: this.translateService.instant(`accessControl.actions.${action}`),\n action,\n selected: currentFilter.action === action,\n }));\n })\n );\n\n public readonly filteredModel$: Observable<EditorModel | null> = combineLatest([\n this._sourceModel$,\n this._filter$,\n ]).pipe(\n map(([sourceModel, currentFilter]) => {\n if (!sourceModel) return null;\n if (!currentFilter.resourceType && !currentFilter.action) return sourceModel;\n\n const permissions = this.parsePermissions(sourceModel);\n const filtered = permissions.filter(permission => {\n const resourceMatch =\n !currentFilter.resourceType || permission.resourceType === currentFilter.resourceType;\n const actionMatch =\n !currentFilter.action ||\n (permission.actions ?? []).includes(currentFilter.action) ||\n permission.action === currentFilter.action;\n return resourceMatch && actionMatch;\n });\n\n return {\n ...sourceModel,\n value: JSON.stringify(filtered, null, 2),\n };\n })\n );\n\n public readonly editorDisabled$: Observable<boolean> = this._filter$.pipe(\n map(({resourceType, action}) => !!resourceType || !!action)\n );\n\n public readonly permissionSchema$: Observable<PermissionSchema> = this.metadataService.schema$;\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly metadataService: PermissionSchemaMetadataService,\n private readonly router: Router,\n private readonly translateService: TranslateService\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.activatedRoute.queryParamMap.pipe(take(1)).subscribe(params => {\n this._filter$.next({\n resourceType: params.get('filterResourceType'),\n action: params.get('filterAction'),\n });\n });\n\n this._subscriptions.add(\n this._filter$.pipe(skip(1)).subscribe(currentFilter => {\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams: {\n filterResourceType: currentFilter.resourceType ?? null,\n filterAction: currentFilter.action ?? null,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['model']) {\n this._sourceModel$.next(this.model);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onValid(valid: boolean): void {\n this.validEvent.emit(valid);\n }\n\n public onValueChange(value: string): void {\n if (this._filter$.getValue().resourceType || this._filter$.getValue().action) return;\n this.valueChangeEvent.emit(value);\n }\n\n public onResourceTypeSelected(event: {item?: ListItem & {resourceType?: string}}): void {\n const resourceType = event.item?.resourceType ?? null;\n this._filter$.next({...this._filter$.getValue(), resourceType, action: null});\n }\n\n public onActionSelected(event: {item?: ListItem & {action?: string}}): void {\n const action = event.item?.action ?? null;\n this._filter$.next({...this._filter$.getValue(), action});\n }\n\n public onClearFilter(): void {\n this._filter$.next({resourceType: null, action: null});\n }\n\n private parsePermissions(model: EditorModel | null): Permission[] {\n if (!model?.value) return [];\n try {\n const parsed = JSON.parse(model.value);\n return Array.isArray(parsed) ? (parsed as Permission[]) : [];\n } catch {\n return [];\n }\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n filteredModel: filteredModel$ | async,\n editorDisabled: editorDisabled$ | async,\n permissionSchema: permissionSchema$ | async,\n } as obs\"\n class=\"json-editor-tab\"\n>\n <div class=\"json-editor-tab__toolbar\">\n <v-overflow-menu placement=\"bottom-end\" [closeOnSelect]=\"false\">\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n class=\"json-editor-tab__filter-trigger\"\n [class.json-editor-tab__filter-trigger--active]=\"isFilterActive$ | async\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"filterPane\"></ng-container>\n </div>\n </v-overflow-menu>\n </div>\n\n <valtimo-editor\n *ngIf=\"obs.permissionSchema\"\n [disabled]=\"obs.editorDisabled || disabled\"\n [fitPage]=\"true\"\n [jsonSchema]=\"obs.permissionSchema\"\n [model]=\"obs.filteredModel\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-editor>\n</div>\n\n<ng-template #filterPane>\n <form class=\"json-editor-tab__filter\" (click)=\"$event.stopImmediatePropagation()\">\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.resourceType' | translate\"\n [placeholder]=\"'accessControl.filter.allResourceTypes' | translate\"\n (selected)=\"onResourceTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"resourceTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.action' | translate\"\n [placeholder]=\"'accessControl.filter.allActions' | translate\"\n (selected)=\"onActionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"actionItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n</ng-template>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport {formatResourceType} from '../utils';\n\n@Pipe({\n standalone: true,\n name: 'resourceTypeLabel',\n})\nexport class ResourceTypeLabelPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(fqn: string | null | undefined): string {\n if (!fqn) return '';\n return formatResourceType(this.translateService, fqn);\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './resource-type-label.pipe';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {BehaviorSubject, combineLatest, map, Observable} from 'rxjs';\nimport {NO_CONTEXT_RESOURCE_TYPE} from '../../constants';\nimport {\n ContainerCondition,\n ExpressionCondition,\n FieldCondition,\n Permission,\n PermissionCondition,\n} from '../../models';\nimport {ResourceTypeLabelPipe} from '../../pipes';\nimport {PermissionSchemaMetadataService} from '../../services';\nimport {formatField, formatOperator, formatValue} from '../../utils';\n\ninterface FormattedFieldCondition {\n kind: 'field';\n field: string;\n operator: string;\n value: string;\n customField: boolean;\n}\n\ninterface FormattedExpressionCondition {\n kind: 'expression';\n field: string;\n path: string;\n operator: string;\n value: string;\n clazz: string;\n customField: boolean;\n}\n\ninterface FormattedContainerCondition {\n kind: 'container';\n resourceType: string;\n conditions: PermissionCondition[];\n customResource: boolean;\n}\n\ntype FormattedCondition =\n | FormattedFieldCondition\n | FormattedExpressionCondition\n | FormattedContainerCondition;\n\ninterface ActionOverview {\n action: string;\n grants: Permission[];\n}\n\ninterface ResourceOverview {\n resourceType: string;\n actions: ActionOverview[];\n}\n\n@Component({\n standalone: true,\n selector: 'valtimo-access-control-overview-tab',\n templateUrl: './access-control-overview-tab.component.html',\n styleUrls: ['./access-control-overview-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: true,\n imports: [CommonModule, RouterModule, TranslateModule, ResourceTypeLabelPipe],\n})\nexport class AccessControlOverviewTabComponent {\n @Input() public roleKey: string | null = null;\n\n @Input()\n public set permissions(value: Permission[] | null) {\n this._permissions$.next(value ?? []);\n }\n\n private readonly _permissions$ = new BehaviorSubject<Permission[]>([]);\n\n public readonly overview$: Observable<ResourceOverview[]> = combineLatest([\n this._permissions$,\n this.metadataService.allResourceTypes$,\n this.metadataService.actionsByResourceType$,\n ]).pipe(\n map(([permissions, allResourceTypes, actionsByResourceType]) =>\n this.buildOverview(permissions, allResourceTypes, actionsByResourceType)\n )\n );\n\n constructor(\n private readonly metadataService: PermissionSchemaMetadataService,\n private readonly translateService: TranslateService\n ) {}\n\n public formatConditions(\n conditions: PermissionCondition[] | null | undefined,\n resourceType: string\n ): FormattedCondition[] {\n return (conditions ?? []).map(condition => this.formatCondition(condition, resourceType));\n }\n\n public isNoContext(contextResourceType: string | null | undefined): boolean {\n return contextResourceType === NO_CONTEXT_RESOURCE_TYPE;\n }\n\n private buildOverview(\n permissions: Permission[],\n allResourceTypes: string[],\n actionsByResourceType: Record<string, string[]>\n ): ResourceOverview[] {\n const knownResourceTypes = new Set(allResourceTypes);\n const extraResourceTypes = permissions\n .map(p => p.resourceType)\n .filter(rt => !!rt && !knownResourceTypes.has(rt));\n const resourceTypes = [...allResourceTypes, ...Array.from(new Set(extraResourceTypes))];\n\n return resourceTypes.map(resourceType => {\n const forResource = permissions.filter(p => p.resourceType === resourceType);\n const allowedActions = actionsByResourceType[resourceType] ?? [];\n const allowedSet = new Set(allowedActions);\n const extraActions = forResource\n .flatMap(p => [...(p.actions ?? []), ...(p.action ? [p.action] : [])])\n .filter(a => !!a && !allowedSet.has(a));\n const actions = [...allowedActions, ...Array.from(new Set(extraActions))];\n\n return {\n resourceType,\n actions: actions.map(action => ({\n action,\n grants: forResource.filter(p => this.permissionGrants(p, action)),\n })),\n };\n });\n }\n\n private permissionGrants(permission: Permission, action: string): boolean {\n if (permission.action === action) return true;\n return (permission.actions ?? []).includes(action);\n }\n\n private formatCondition(\n condition: PermissionCondition,\n resourceType: string\n ): FormattedCondition {\n if (condition.type === 'container') {\n return this.formatContainer(condition);\n }\n if (condition.type === 'expression') {\n return this.formatExpression(condition, resourceType);\n }\n return this.formatField(condition, resourceType);\n }\n\n private formatField(condition: FieldCondition, resourceType: string): FormattedFieldCondition {\n return {\n kind: 'field',\n field: formatField(this.translateService, resourceType, condition.field),\n operator: formatOperator(this.translateService, condition.operator),\n value: formatValue(this.translateService, condition.value),\n customField: !this.metadataService.isFieldKnown(resourceType, condition.field),\n };\n }\n\n private formatExpression(\n condition: ExpressionCondition,\n resourceType: string\n ): FormattedExpressionCondition {\n return {\n kind: 'expression',\n field: formatField(this.translateService, resourceType, condition.field),\n path: condition.path,\n operator: formatOperator(this.translateService, condition.operator),\n value: formatValue(this.translateService, condition.value),\n clazz: condition.clazz,\n customField: !this.metadataService.isFieldKnown(resourceType, condition.field),\n };\n }\n\n private formatContainer(condition: ContainerCondition): FormattedContainerCondition {\n return {\n kind: 'container',\n resourceType: condition.resourceType,\n conditions: condition.conditions ?? [],\n customResource: !this.metadataService.isResourceTypeKnown(condition.resourceType),\n };\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"overview$ | async as overview\" class=\"ac\">\n @for (resource of overview; track resource.resourceType) {\n <section class=\"ac__group\">\n <h4 class=\"ac__heading\">\n @if (roleKey) {\n <a\n class=\"ac__heading-link\"\n [routerLink]=\"['/access-control', roleKey, 'json-editor']\"\n [queryParams]=\"{filterResourceType: resource.resourceType}\"\n >\n {{ resource.resourceType | resourceTypeLabel }}\n <span class=\"ac__fqn\">({{ resource.resourceType }})</span>\n </a>\n } @else {\n {{ resource.resourceType | resourceTypeLabel }}\n <span class=\"ac__fqn\">({{ resource.resourceType }})</span>\n }\n </h4>\n\n @for (entry of resource.actions; track entry.action) {\n <div class=\"ac__action\">\n @if (entry.grants.length) {\n <span class=\"ac__connective\">{{ 'accessControl.overview.can' | translate }}</span>\n @if (roleKey) {\n <a\n class=\"ac__action-link\"\n [routerLink]=\"['/access-control', roleKey, 'json-editor']\"\n [queryParams]=\"{\n filterResourceType: resource.resourceType,\n filterAction: entry.action,\n }\"\n >\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n </a>\n } @else {\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n }\n\n @for (perm of entry.grants; track $index; let isFirst = $first) {\n @if (!isFirst) {\n <div class=\"ac__or ac__connective\">{{\n 'accessControl.overview.or' | translate\n }}</div>\n }\n <div class=\"ac__grant\">\n @if (perm.conditions?.length) {\n <div class=\"ac__connective\">{{\n 'accessControl.overview.when' | translate\n }}</div>\n <ng-container\n *ngTemplateOutlet=\"\n conditionsTpl;\n context: {\n conditions: perm.conditions,\n resourceType: perm.resourceType,\n }\n \"\n ></ng-container>\n } @else if (!perm.contextResourceType) {\n <div class=\"ac__connective\">{{\n 'accessControl.overview.unconditional' | translate\n }}</div>\n }\n\n @if (perm.contextResourceType) {\n @if (isNoContext(perm.contextResourceType)) {\n <div class=\"ac__connective\">{{\n 'accessControl.overview.noContext' | translate\n }}</div>\n } @else {\n <div>\n <span class=\"ac__connective\">{{\n 'accessControl.overview.inContextOf' | translate\n }}</span>\n <span class=\"ac__resource-type\">{{\n perm.contextResourceType | resourceTypeLabel\n }}</span>\n @if (perm.contextConditions?.length) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.where' | translate\n }}</span>\n }\n </div>\n @if (perm.contextConditions?.length) {\n <ng-container\n *ngTemplateOutlet=\"\n conditionsTpl;\n context: {\n conditions: perm.contextConditions,\n resourceType: perm.contextResourceType,\n }\n \"\n ></ng-container>\n }\n }\n }\n </div>\n }\n } @else {\n <span class=\"ac__no-access\">{{\n 'accessControl.overview.cannot' | translate\n }}</span>\n @if (roleKey) {\n <a\n class=\"ac__action-link\"\n [routerLink]=\"['/access-control', roleKey, 'json-editor']\"\n [queryParams]=\"{\n filterResourceType: resource.resourceType,\n filterAction: entry.action,\n }\"\n >\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n </a>\n } @else {\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n }\n }\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template #conditionsTpl let-conditions=\"conditions\" let-resourceType=\"resourceType\">\n <div class=\"ac__conditions\">\n @for (\n condition of formatConditions(conditions, resourceType);\n track $index;\n let isFirst = $first\n ) {\n <div class=\"ac__condition\">\n @if (!isFirst) {\n <span class=\"ac__connective\">{{ 'accessControl.overview.and' | translate }}</span>\n }\n @switch (condition.kind) {\n @case ('field') {\n <span>{{ condition.field }}</span>\n @if (condition.customField) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.customField' | translate\n }}</span>\n }\n <span class=\"ac__operator\">{{ condition.operator }}</span>\n <span>{{ condition.value }}</span>\n }\n\n @case ('expression') {\n <span>{{ condition.field }}</span>\n @if (condition.customField) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.customField' | translate\n }}</span>\n }\n <span class=\"ac__connective\">{{\n 'accessControl.overview.atJsonPath' | translate\n }}</span>\n <code class=\"ac__path\" [title]=\"condition.clazz\">{{ condition.path }}</code>\n <span class=\"ac__operator\">{{ condition.operator }}</span>\n <span>{{ condition.value }}</span>\n }\n\n @case ('container') {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.relatedResource' | translate\n }}</span>\n <span class=\"ac__resource-type\">{{\n condition.resourceType | resourceTypeLabel\n }}</span>\n @if (condition.customResource) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.customResource' | translate\n }}</span>\n }\n <span class=\"ac__connective\">{{\n 'accessControl.overview.where' | translate\n }}</span>\n <ng-container\n *ngTemplateOutlet=\"\n conditionsTpl;\n context: {\n conditions: condition.conditions,\n resourceType: condition.resourceType,\n }\n \"\n ></ng-container>\n }\n }\n </div>\n }\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit, signal} from '@angular/core';\nimport {AccessControlService} from '../../services/access-control.service';\nimport {BehaviorSubject, filter, finalize, map, Subscription, switchMap, take, tap} from 'rxjs';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {EditorModel, PageHeaderService, PageTitleService} from '@valtimo/components';\nimport {AccessControlEditorTab, Permission, Role} from '../../models';\nimport {TranslateService} from '@ngx-translate/core';\nimport {AccessControlExportService} from '../../services/access-control-export.service';\nimport {GlobalNotificationService} from '@valtimo/shared';\n\n@Component({\n standalone: false,\n templateUrl: './access-control-editor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./access-control-editor.component.scss'],\n})\nexport class AccessControlEditorComponent implements OnInit, OnDestroy {\n public readonly model$ = new BehaviorSubject<EditorModel | null>(null);\n public readonly permissions$ = new BehaviorSubject<Permission[] | null>(null);\n public readonly roleKey$ = new BehaviorSubject<string | null>(null);\n public readonly saveDisabled$ = new BehaviorSubject<boolean>(true);\n public readonly editorDisabled$ = new BehaviorSubject<boolean>(false);\n public readonly moreDisabled$ = new BehaviorSubject<boolean>(true);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly showEditModal$ = new BehaviorSubject<boolean>(false);\n public readonly selectedRowKeys$ = new BehaviorSubject<Array<string> | null>(null);\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n public readonly $activeTab = signal<AccessControlEditorTab>(AccessControlEditorTab.SUMMARY);\n\n protected readonly AccessControlEditorTab = AccessControlEditorTab;\n\n private _roleKeySubscription!: Subscription;\n private _roleKey!: string;\n private readonly _updatedModelValue$ = new BehaviorSubject<string>('');\n\n constructor(\n private readonly accessControlService: AccessControlService,\n private readonly route: ActivatedRoute,\n private readonly pageTitleService: PageTitleService,\n private readonly router: Router,\n private readonly globalNotificationService: GlobalNotificationService,\n private readonly translateService: TranslateService,\n private readonly accessControlExportService: AccessControlExportService,\n private readonly pageHeaderService: PageHeaderService\n ) {}\n\n public ngOnInit(): void {\n this.restoreActiveTabFromUrl();\n this.getPermissions();\n this.openRoleKeySubscription();\n }\n\n public ngOnDestroy(): void {\n this.pageTitleService.enableReset();\n this._roleKeySubscription?.unsubscribe();\n }\n\n public onValid(valid: boolean): void {\n this.saveDisabled$.next(valid === false);\n }\n\n public onValueChange(value: string): void {\n this._updatedModelValue$.next(value);\n }\n\n public updatePermissions(): void {\n this.disableEditor();\n this.disableSave();\n this.disableMore();\n\n this._updatedModelValue$\n .pipe(\n take(1),\n switchMap(updatedModelValue =>\n this.accessControlService.updateRolePermissions(\n this._roleKey,\n JSON.parse(updatedModelValue)\n )\n )\n )\n .subscribe({\n next: result => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n this.showSuccessMessage(this._roleKey);\n this.setModel(result);\n },\n error: () => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n },\n });\n }\n\n public onDelete(roles: Array<string>): void {\n this.disableEditor();\n this.disableSave();\n this.disableMore();\n\n this.accessControlService.dispatchAction(\n this.accessControlService.deleteRoles({roles}).pipe(\n finalize(() => {\n this.router.navigate(['/access-control']);\n })\n )\n );\n }\n\n public showDeleteModal(): void {\n this.showDeleteModal$.next(true);\n }\n\n public showEditModal(): void {\n this.showEditModal$.next(true);\n }\n\n public onEdit(currentRoleKey: string, data: Role | null): void {\n this.showEditModal$.next(false);\n\n if (!data) {\n return;\n }\n\n this.disableEditor();\n this.disableSave();\n this.disableMore();\n\n this.accessControlService.updateRole(currentRoleKey, data).subscribe(() => {\n this.router.navigate([`/access-control/${data.roleKey}`]);\n this.showSuccessMessage(data.roleKey);\n });\n }\n\n public setActiveTab(tab: AccessControlEditorTab): void {\n if (this.$activeTab() === tab) return;\n\n const roleKey = this.route.snapshot.paramMap.get('id');\n if (!roleKey) {\n this.$activeTab.set(tab);\n return;\n }\n\n const segments =\n tab === AccessControlEditorTab.JSON_EDITOR\n ? ['/access-control', roleKey, 'json-editor']\n : ['/access-control', roleKey];\n\n this.router.navigate(segments);\n }\n\n private restoreActiveTabFromUrl(): void {\n const url = this.route.snapshot.url;\n const lastSegment = url[url.length - 1]?.path;\n if (lastSegment === 'json-editor') {\n this.$activeTab.set(AccessControlEditorTab.JSON_EDITOR);\n return;\n }\n\n const params = this.route.snapshot.queryParamMap;\n if (params.get('filterResourceType') || params.get('filterAction')) {\n this.$activeTab.set(AccessControlEditorTab.JSON_EDITOR);\n }\n }\n\n public exportPermissions(): void {\n this.accessControlExportService\n .exportRoles({type: 'separate', roleKeys: [this._roleKey]})\n .subscribe();\n }\n\n private openRoleKeySubscription(): void {\n this._roleKeySubscription = this.route.params\n .pipe(\n filter(params => params?.id),\n map(params => params.id),\n tap(roleKey => {\n this._roleKey = roleKey;\n this.roleKey$.next(roleKey);\n this.pageTitleService.setCustomPageTitle(roleKey, true);\n this.selectedRowKeys$.next([roleKey]);\n }),\n switchMap(roleKey => this.accessControlService.getRolePermissions(roleKey)),\n tap(permissions => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n this.setModel(permissions);\n })\n )\n .subscribe();\n }\n\n private getPermissions(): void {\n this.route.params\n .pipe(\n tap(params => {\n this.pageTitleService.setCustomPageTitle(params?.id);\n this.roleKey$.next(params?.id ?? null);\n this.selectedRowKeys$.next([params?.id]);\n }),\n switchMap(params => this.accessControlService.getRolePermissions(params.id))\n )\n .subscribe(permissions => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n this.setModel(permissions);\n });\n }\n\n private setModel(permissions: object): void {\n const roleKey = this.roleKey$.value ?? 'unknown';\n this.model$.next({\n value: JSON.stringify(permissions),\n language: 'json',\n uri: `inmemory://access-control/role-${roleKey}.access-control-permissions.json`,\n });\n this.permissions$.next(Array.isArray(permissions) ? (permissions as Permission[]) : null);\n }\n\n private disableMore(): void {\n this.moreDisabled$.next(true);\n }\n\n private enableMore(): void {\n this.moreDisabled$.next(false);\n }\n\n private disableSave(): void {\n this.saveDisabled$.next(true);\n }\n\n private enableSave(): void {\n this.saveDisabled$.next(false);\n }\n\n private disableEditor(): void {\n this.editorDisabled$.next(true);\n }\n\n private enableEditor(): void {\n this.editorDisabled$.next(false);\n }\n\n private showSuccessMessage(roleKey: string): void {\n this.globalNotificationService.showToast({\n title: this.translateService.instant('accessControl.roles.savedSuccessTitle'),\n caption: this.translateService.instant('accessControl.roles.savedSuccessTitleMessage', {\n roleKey,\n }),\n type: 'success',\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"model$ | async as model; else loading\">\n <cds-tabs type=\"contained\">\n <cds-tab\n [active]=\"$activeTab() === AccessControlEditorTab.SUMMARY\"\n [heading]=\"'accessControl.roles.tabs.summary' | translate\"\n (selected)=\"setActiveTab(AccessControlEditorTab.SUMMARY)\"\n >\n <valtimo-access-control-overview-tab\n *ngIf=\"$activeTab() === AccessControlEditorTab.SUMMARY\"\n [permissions]=\"permissions$ | async\"\n [roleKey]=\"roleKey$ | async\"\n ></valtimo-access-control-overview-tab>\n </cds-tab>\n\n <cds-tab\n [active]=\"$activeTab() === AccessControlEditorTab.JSON_EDITOR\"\n [heading]=\"'accessControl.roles.tabs.jsonEditor' | translate\"\n (selected)=\"setActiveTab(AccessControlEditorTab.JSON_EDITOR)\"\n >\n <valtimo-access-control-json-editor-tab\n *ngIf=\"$activeTab() === AccessControlEditorTab.JSON_EDITOR\"\n [disabled]=\"editorDisabled$ | async\"\n [model]=\"model\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-access-control-json-editor-tab>\n </cds-tab>\n </cds-tabs>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n *ngIf=\"{\n model: model$ | async,\n moreDisabled: moreDisabled$ | async,\n compactMode: compactMode$ | async,\n } as obs\"\n class=\"buttons-container\"\n >\n <v-overflow-menu class=\"overflow-button\" placement=\"bottom-end\">\n <v-overflow-menu-trigger overflowTrigger></v-overflow-menu-trigger>\n <v-overflow-menu-option [disabled]=\"obs.moreDisabled\" (selected)=\"showEditModal()\">{{\n 'accessControl.roles.editMetadata' | translate\n }}</v-overflow-menu-option>\n\n <v-overflow-menu-option [disabled]=\"obs.moreDisabled\" (selected)=\"exportPermissions()\">{{\n 'interface.export' | translate\n }}</v-overflow-menu-option>\n\n <v-overflow-menu-option\n [disabled]=\"obs.moreDisabled\"\n type=\"danger\"\n (selected)=\"showDeleteModal()\"\n >{{ 'interface.delete' | translate }}</v-overflow-menu-option\n >\n </v-overflow-menu>\n\n <button\n [disabled]=\"saveDisabled$ | async\"\n cdsButton=\"primary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"updatePermissions()\"\n >\n {{ 'interface.save' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"save\" size=\"16\"></svg>\n </button>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"{selectedRowKeys: selectedRowKeys$ | async} as obs\">\n <valtimo-delete-role-modal\n [deleteRowKeys]=\"obs.selectedRowKeys\"\n [showDeleteModal$]=\"showDeleteModal$\"\n (deleteEvent)=\"onDelete($event)\"\n >\n </valtimo-delete-role-modal>\n\n <valtimo-role-metadata-modal\n [defaultKeyValue]=\"obs.selectedRowKeys[0]\"\n [open]=\"showEditModal$ | async\"\n type=\"edit\"\n (closeEvent)=\"onEdit(obs.selectedRowKeys[0], $event)\"\n ></valtimo-role-metadata-modal>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AuthGuardService} from '@valtimo/security';\nimport {AccessControlOverviewComponent} from './components/overview/access-control-overview.component';\nimport {AccessControlEditorComponent} from './components/editor/access-control-editor.component';\n\nconst routes: Routes = [\n {\n path: 'access-control',\n component: AccessControlOverviewComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Access control', roles: [ROLE_ADMIN]},\n },\n {\n path: 'access-control/:id',\n component: AccessControlEditorComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Role details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n },\n },\n {\n path: 'access-control/:id/json-editor',\n component: AccessControlEditorComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Role details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n },\n },\n];\n\n@NgModule({\n imports: [CommonModule, RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AccessControlManagementRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n RenderInPageHeaderDirective,\n} from '@valtimo/components';\nimport {AccessControlManagementRoutingModule} from './access-control-management-routing.module';\nimport {AccessControlOverviewComponent} from './components/overview/access-control-overview.component';\nimport {RoleMetadataModalComponent} from './components/role-metadata-modal/role-metadata-modal.component';\nimport {\n ButtonModule,\n IconModule,\n InputModule,\n LoadingModule,\n ModalModule,\n NotificationModule,\n TabsModule,\n} from 'carbon-components-angular';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {AccessControlEditorComponent} from './components/editor/access-control-editor.component';\nimport {AccessControlJsonEditorTabComponent} from './components/access-control-json-editor-tab/access-control-json-editor-tab.component';\nimport {AccessControlOverviewTabComponent} from './components/access-control-overview-tab/access-control-overview-tab.component';\nimport {DeleteRoleModalComponent} from './components/delete-role-modal/delete-role-modal.component';\nimport {ExportRoleModalComponent} from './components/export-role-modal/export-role-modal.component';\n\n@NgModule({\n declarations: [\n AccessControlOverviewComponent,\n RoleMetadataModalComponent,\n AccessControlEditorComponent,\n DeleteRoleModalComponent,\n ExportRoleModalComponent,\n ],\n imports: [\n CommonModule,\n AccessControlManagementRoutingModule,\n ButtonModule,\n FormsModule,\n ModalModule,\n TranslateModule,\n ReactiveFormsModule,\n InputModule,\n IconModule,\n ConfirmationModalModule,\n RenderInPageHeaderDirective,\n LoadingModule,\n IconModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n NotificationModule,\n CarbonListModule,\n TabsModule,\n AccessControlJsonEditorTabComponent,\n AccessControlOverviewTabComponent,\n ],\n})\nexport class AccessControlManagementModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of access-control\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/access-control-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService","i1","i2","i3","i4","i2.AccessControlExportService","i5","i6","i7.RoleMetadataModalComponent","i8.DeleteRoleModalComponent","i9.ExportRoleModalComponent","i10","i3.PermissionSchemaMetadataService","i1.PermissionSchemaMetadataService","i6.AccessControlExportService","i7","i8","i9.AccessControlJsonEditorTabComponent","i10.AccessControlOverviewTabComponent","i11.RoleMetadataModalComponent","i12.DeleteRoleModalComponent"],"mappings":"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"}
1
+ {"version":3,"file":"valtimo-access-control-management.mjs","sources":["../../../../projects/valtimo/access-control-management/src/lib/models/access-control-editor-tab.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/permission.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/permission-schema.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/role.model.ts","../../../../projects/valtimo/access-control-management/src/lib/models/index.ts","../../../../projects/valtimo/access-control-management/src/lib/services/access-control.service.ts","../../../../projects/valtimo/access-control-management/src/lib/services/permission-schema-metadata.service.ts","../../../../projects/valtimo/access-control-management/src/lib/services/index.ts","../../../../projects/valtimo/access-control-management/src/lib/services/access-control-export.service.ts","../../../../projects/valtimo/access-control-management/src/lib/components/role-metadata-modal/role-metadata-modal.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/role-metadata-modal/role-metadata-modal.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/delete-role-modal/delete-role-modal.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/delete-role-modal/delete-role-modal.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/export-role-modal/export-role-modal.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/export-role-modal/export-role-modal.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/overview/access-control-overview.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/overview/access-control-overview.component.html","../../../../projects/valtimo/access-control-management/src/lib/constants/access-control-labels.ts","../../../../projects/valtimo/access-control-management/src/lib/constants/index.ts","../../../../projects/valtimo/access-control-management/src/lib/utils/format-condition.ts","../../../../projects/valtimo/access-control-management/src/lib/utils/index.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-json-editor-tab/access-control-json-editor-tab.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-json-editor-tab/access-control-json-editor-tab.component.html","../../../../projects/valtimo/access-control-management/src/lib/pipes/resource-type-label.pipe.ts","../../../../projects/valtimo/access-control-management/src/lib/pipes/index.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-overview-tab/access-control-overview-tab.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/access-control-overview-tab/access-control-overview-tab.component.html","../../../../projects/valtimo/access-control-management/src/lib/components/editor/access-control-editor.component.ts","../../../../projects/valtimo/access-control-management/src/lib/components/editor/access-control-editor.component.html","../../../../projects/valtimo/access-control-management/src/lib/access-control-management-routing.module.ts","../../../../projects/valtimo/access-control-management/src/lib/access-control-management.module.ts","../../../../projects/valtimo/access-control-management/src/public-api.ts","../../../../projects/valtimo/access-control-management/src/valtimo-access-control-management.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nenum AccessControlEditorTab {\n SUMMARY = 'summary',\n JSON_EDITOR = 'jsonEditor',\n}\n\ninterface AccessControlFilter {\n resourceType: string | null;\n action: string | null;\n}\n\nexport {AccessControlEditorTab, AccessControlFilter};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype ConditionOperator = '==' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'list_contains';\n\ninterface FieldCondition {\n type: 'field';\n field: string;\n operator: ConditionOperator;\n value: unknown;\n}\n\ninterface ExpressionCondition {\n type: 'expression';\n field: string;\n path: string;\n operator: ConditionOperator;\n value: unknown;\n clazz: string;\n}\n\ninterface ContainerCondition {\n type: 'container';\n resourceType: string;\n conditions: PermissionCondition[];\n}\n\ntype PermissionCondition = FieldCondition | ExpressionCondition | ContainerCondition;\n\ninterface Permission {\n resourceType: string;\n action?: string;\n actions?: string[];\n roleKey: string;\n conditions?: PermissionCondition[];\n contextResourceType?: string;\n contextConditions?: PermissionCondition[];\n}\n\ninterface ResourcePermissionGroup {\n resourceType: string;\n permissions: Permission[];\n}\n\nexport {\n ConditionOperator,\n ContainerCondition,\n ExpressionCondition,\n FieldCondition,\n Permission,\n PermissionCondition,\n ResourcePermissionGroup,\n};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// JSON Schema returned by GET /api/management/v1/permissions/schema. Passed to the Monaco\n// JSON editor (via valtimo-editor [jsonSchema]) to drive validation and autocomplete.\ntype PermissionSchema = object;\n\ninterface SchemaAllOfBranch {\n if?: {properties?: {resourceType?: {const?: string}}};\n then?: {properties?: {action?: {enum?: string[]}}};\n}\n\ninterface SchemaOneOfEntry {\n const?: string;\n}\n\ninterface SchemaCondListVariant {\n allOf?: Array<{$ref?: string; properties?: {field?: {enum?: string[]}}}>;\n}\n\ninterface SchemaCondListDefinition {\n items?: {oneOf?: SchemaCondListVariant[]};\n}\n\ninterface SchemaShape {\n items?: {\n allOf?: SchemaAllOfBranch[];\n properties?: {resourceType?: {oneOf?: SchemaOneOfEntry[]}};\n };\n definitions?: Record<string, SchemaCondListDefinition>;\n}\n\nexport {PermissionSchema, SchemaShape};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface Role {\n roleKey: string;\n}\n\ninterface DeleteRolesRequest {\n roles: Array<string>;\n}\n\ntype RoleMetadataModal = 'add' | 'edit';\n\ntype RoleExport = 'unified' | 'separate';\n\ninterface ExportRoleOutput {\n roleKeys: Array<string>;\n type: RoleExport;\n}\n\nexport {Role, DeleteRolesRequest, RoleMetadataModal, RoleExport, ExportRoleOutput};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './access-control-editor-tab.model';\nexport * from './permission.model';\nexport * from './permission-schema.model';\nexport * from './role.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {DeleteRolesRequest, Permission, PermissionSchema, Role} from '../models';\n\n@Injectable({providedIn: 'root'})\nexport class AccessControlService {\n public readonly roles$ = new BehaviorSubject<Role[]>([]);\n public readonly loading$ = new BehaviorSubject<boolean>(false);\n\n private valtimoEndpointUri: string;\n\n private get roleDtos$(): Observable<Role[]> {\n return this.http.get<Role[]>(`${this.valtimoEndpointUri}v1/roles`);\n }\n\n constructor(\n private readonly configService: ConfigService,\n private readonly http: HttpClient\n ) {\n this.valtimoEndpointUri = `${this.configService.config.valtimoApi.endpointUri}management/`;\n }\n\n public addRole(role: Role): Observable<Role> {\n return this.http.post<Role>(`${this.valtimoEndpointUri}v1/roles`, role);\n }\n\n public deleteRoles(request: DeleteRolesRequest): Observable<null> {\n return this.http.delete<null>(`${this.valtimoEndpointUri}v1/roles`, {body: request});\n }\n\n public dispatchAction(actionResult: Observable<Role | null>): void {\n actionResult\n .pipe(\n tap(() => {\n this.loading$.next(true);\n }),\n switchMap(() => this.roleDtos$),\n take(1),\n catchError(error => of(error))\n )\n .subscribe({\n next: (roles: Role[]) => {\n this.roles$.next(roles);\n this.loading$.next(false);\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n public loadRoles(): void {\n this.roleDtos$\n .pipe(\n tap(() => {\n this.loading$.next(true);\n }),\n take(1)\n )\n .subscribe({\n next: (items: Role[]) => {\n this.roles$.next(items);\n this.loading$.next(false);\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n public getRolePermissions(roleKey: string): Observable<Permission[]> {\n return this.http.get<Permission[]>(\n `${this.valtimoEndpointUri}v1/roles/${roleKey}/permissions`\n );\n }\n\n public exportRolePermissions(roles: string[]): Observable<object[]> {\n return this.http.post<object[]>(`${this.valtimoEndpointUri}v1/permissions/search`, {roles});\n }\n\n public updateRolePermissions(roleKey: string, updatedPermission: object): Observable<object> {\n return this.http.put<object>(\n `${this.valtimoEndpointUri}v1/roles/${roleKey}/permissions`,\n updatedPermission\n );\n }\n\n public getPermissionSchema(): Observable<PermissionSchema> {\n return this.http.get<PermissionSchema>(`${this.valtimoEndpointUri}v1/permissions/schema`);\n }\n\n public updateRole(roleKey: string, request: Role): Observable<object> {\n return this.http.put<object>(`${this.valtimoEndpointUri}v1/roles/${roleKey}`, request);\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {BehaviorSubject, map, Observable, shareReplay, tap} from 'rxjs';\nimport {PermissionSchema, SchemaShape} from '../models';\nimport {AccessControlService} from './access-control.service';\n\n@Injectable({providedIn: 'root'})\nexport class PermissionSchemaMetadataService {\n private readonly _knownResourceTypes$ = new BehaviorSubject<Set<string>>(new Set());\n private readonly _fieldsByResourceType$ = new BehaviorSubject<Record<string, Set<string>>>({});\n\n public readonly schema$: Observable<PermissionSchema> = this.accessControlService\n .getPermissionSchema()\n .pipe(\n tap(schema => {\n this._knownResourceTypes$.next(this.extractKnownResourceTypes(schema));\n this._fieldsByResourceType$.next(this.extractFieldsByResourceType(schema));\n }),\n shareReplay({bufferSize: 1, refCount: false})\n );\n\n public readonly actionsByResourceType$: Observable<Record<string, string[]>> =\n this.schema$.pipe(map(schema => this.extractActionsByResourceType(schema)));\n\n public readonly allResourceTypes$: Observable<string[]> = this.actionsByResourceType$.pipe(\n map(actions => Object.keys(actions))\n );\n\n constructor(private readonly accessControlService: AccessControlService) {}\n\n public isResourceTypeKnown(fqn: string): boolean {\n return this._knownResourceTypes$.value.has(fqn);\n }\n\n public isFieldKnown(resourceType: string, field: string): boolean {\n return this._fieldsByResourceType$.value[resourceType]?.has(field) ?? false;\n }\n\n private extractActionsByResourceType(schema: PermissionSchema): Record<string, string[]> {\n const branches = (schema as SchemaShape)?.items?.allOf ?? [];\n const result: Record<string, string[]> = {};\n for (const branch of branches) {\n const resourceType = branch?.if?.properties?.resourceType?.const;\n const actions = branch?.then?.properties?.action?.enum;\n if (resourceType && Array.isArray(actions)) {\n result[resourceType] = [...actions];\n }\n }\n return result;\n }\n\n private extractKnownResourceTypes(schema: PermissionSchema): Set<string> {\n const entries = (schema as SchemaShape)?.items?.properties?.resourceType?.oneOf ?? [];\n const result = new Set<string>();\n for (const entry of entries) {\n if (entry?.const) result.add(entry.const);\n }\n return result;\n }\n\n private extractFieldsByResourceType(schema: PermissionSchema): Record<string, Set<string>> {\n const definitions = (schema as SchemaShape)?.definitions ?? {};\n const result: Record<string, Set<string>> = {};\n for (const [key, def] of Object.entries(definitions)) {\n if (!key.startsWith('condList.')) continue;\n const resourceType = key.substring('condList.'.length);\n const fields = new Set<string>();\n for (const variant of def?.items?.oneOf ?? []) {\n for (const part of variant?.allOf ?? []) {\n for (const f of part?.properties?.field?.enum ?? []) fields.add(f);\n }\n }\n result[resourceType] = fields;\n }\n return result;\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './access-control.service';\nexport * from './permission-schema-metadata.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {AccessControlService} from './access-control.service';\nimport {ExportRoleOutput, RoleExport} from '../models';\nimport {catchError, combineLatest, map, Observable, of, tap} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class AccessControlExportService {\n constructor(private readonly accessControlService: AccessControlService) {}\n\n public exportRoles(event: ExportRoleOutput): Observable<boolean> {\n return (\n event.type === 'unified'\n ? this.accessControlService.exportRolePermissions(event.roleKeys).pipe(\n tap(res => {\n this.downloadJson(res, event.type);\n })\n )\n : combineLatest(\n event.roleKeys.map((roleKey: string) =>\n this.accessControlService.exportRolePermissions([roleKey])\n )\n ).pipe(\n tap(res => {\n res.forEach((permissions, index) => {\n const roleKey = event.roleKeys[index];\n this.downloadJson(permissions, event.type, roleKey);\n });\n })\n )\n ).pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n\n private downloadJson(permissions: Array<object>, type: RoleExport, roleKey?: string): void {\n const sJson = JSON.stringify({permissions}, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(sJson));\n element.setAttribute(\n 'download',\n `${type === 'separate' ? roleKey : 'combined'}.permission.json`\n );\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click(); // simulate click\n document.body.removeChild(element);\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {Role, RoleMetadataModal} from '../../models';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\n\n@Component({\n standalone: false,\n selector: 'valtimo-role-metadata-modal',\n templateUrl: './role-metadata-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoleMetadataModalComponent {\n @Input() open = false;\n @Input() type: RoleMetadataModal = 'add';\n @Input() set defaultKeyValue(value: string) {\n this._defaultKeyValue = value;\n this.setDefaultKeyValue(value);\n }\n @Output() closeEvent = new EventEmitter<Role | null>();\n\n public form = this.fb.group({\n key: this.fb.control('', Validators.required),\n });\n\n private _defaultKeyValue!: string;\n\n public get key() {\n return this.form?.get('key');\n }\n\n constructor(private readonly fb: FormBuilder) {}\n\n public onCancel(): void {\n this.closeEvent.emit(null);\n this.resetForm();\n }\n\n public onConfirm(): void {\n if (!this.key) {\n return;\n }\n\n this.closeEvent.emit({roleKey: this.key.value});\n this.resetForm();\n }\n\n private setDefaultKeyValue(value: string) {\n this.key.setValue(value);\n }\n\n private resetForm(): void {\n setTimeout(() => {\n this.form.reset();\n if (this.type === 'edit') {\n this.setDefaultKeyValue(this._defaultKeyValue);\n }\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{\n isAdd: type === 'add',\n } as vars\"\n [open]=\"open\"\n showFooter=\"true\"\n [title]=\"vars.title\"\n valtimoCdsModal\n (close)=\"onCancel()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{\n vars.isAdd\n ? ('accessControl.roles.add' | translate)\n : ('accessControl.roles.editRole' | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\">\n <cds-label [invalid]=\"key.dirty && key.invalid\">\n {{ 'accessControl.roles.name' | translate }}\n\n <input\n formControlName=\"key\"\n cdsText\n placeholder=\"{{ 'accessControl.roles.name' | translate }}\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"key.dirty && key.invalid\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button [disabled]=\"this.form.invalid\" (click)=\"onConfirm()\" cdsButton=\"primary\">\n {{ vars.isAdd ? ('interface.create' | translate) : ('interface.save' | translate) }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Observable} from 'rxjs';\n\n@Component({\n standalone: false,\n selector: 'valtimo-delete-role-modal',\n templateUrl: './delete-role-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DeleteRoleModalComponent {\n @Input() deleteRowKeys: Array<string>;\n @Input() showDeleteModal$: Observable<boolean>;\n @Output() deleteEvent = new EventEmitter<Array<string>>();\n\n public onDelete(roles: Array<string>): void {\n this.deleteEvent.emit(roles);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"accessControl.roles.deleteModalContent\"\n [outputOnConfirm]=\"deleteRowKeys\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport {ExportRoleOutput, RoleExport} from '../../models';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\n\n@Component({\n standalone: false,\n selector: 'valtimo-export-role-modal',\n templateUrl: './export-role-modal.component.html',\n styleUrls: ['./export-role-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExportRoleModalComponent implements OnInit, OnDestroy {\n @Input() open = false;\n @Input() exportRowKeys: Array<string>;\n @Input() reset$!: Observable<null>;\n @Input() disabled: boolean;\n\n @Output() exportEvent = new EventEmitter<ExportRoleOutput>();\n @Output() closeEvent = new EventEmitter<any>();\n\n public readonly selectedType$ = new BehaviorSubject<RoleExport | null>(null);\n\n private _resetSubscription!: Subscription;\n\n public ngOnInit(): void {\n this.openResetSubscription();\n }\n\n public ngOnDestroy(): void {\n this._resetSubscription?.unsubscribe();\n }\n\n public onCancel(): void {\n if (!this.disabled) {\n this.resetType();\n this.closeEvent.emit();\n }\n }\n\n public onConfirm(type: RoleExport): void {\n this.exportEvent.emit({type, roleKeys: this.exportRowKeys});\n }\n\n public selectType(type: RoleExport): void {\n this.selectedType$.next(type);\n }\n\n private resetType(): void {\n setTimeout(() => {\n this.selectedType$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n private openResetSubscription(): void {\n this._resetSubscription = this.reset$?.subscribe(() => {\n this.closeEvent.emit();\n this.resetType();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{title: ('interface.export' | translate), selectedType: selectedType$ | async} as vars\"\n valtimoCdsModal\n [open]=\"open\"\n size=\"sm\"\n showFooter=\"true\"\n [title]=\"vars.title\"\n (close)=\"onCancel()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ vars.title }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <div class=\"export-buttons\">\n <button [disabled]=\"disabled\" cdsButton=\"secondary\" (click)=\"selectType('unified')\">\n {{ 'accessControl.roles.singleExport' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"document\" size=\"16\"></svg>\n </button>\n\n <button [disabled]=\"disabled\" cdsButton=\"secondary\" (click)=\"selectType('separate')\">\n {{ 'accessControl.roles.multipleExport' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"copy--file\" size=\"16\"></svg>\n </button>\n </div>\n </section>\n\n <cds-modal-footer>\n <button [disabled]=\"disabled\" cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n [disabled]=\"!vars.selectedType || disabled\"\n cdsButton=\"primary\"\n (click)=\"onConfirm(vars.selectedType)\"\n >\n {{ vars.title }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ChangeDetectionStrategy, Component, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {CARBON_CONSTANTS, CarbonListComponent, ColumnConfig, ViewType} from '@valtimo/components';\nimport {BehaviorSubject, delay, finalize, Observable, Subject, tap} from 'rxjs';\nimport {ExportRoleOutput, Role} from '../../models';\nimport {AccessControlExportService} from '../../services/access-control-export.service';\nimport {AccessControlService} from '../../services/access-control.service';\n\n@Component({\n standalone: false,\n templateUrl: './access-control-overview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccessControlOverviewComponent implements OnInit {\n @ViewChild(CarbonListComponent) carbonList: CarbonListComponent;\n\n public fields: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'roleKey',\n label: 'accessControl.roles.key',\n },\n ];\n\n public readonly roles$: Observable<Role[]> = this.accessControlService.roles$;\n public readonly loading$: Observable<boolean> = this.accessControlService.loading$;\n public readonly skeleton$ = new BehaviorSubject<boolean>(false);\n public readonly showAddModal$ = new BehaviorSubject<boolean>(false);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly showExportModal$ = new BehaviorSubject<boolean>(false);\n public readonly selectedRowKeys$ = new BehaviorSubject<Array<string>>([]);\n public readonly resetExportType$ = new Subject<null>();\n public readonly exportDisabled$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n private readonly accessControlService: AccessControlService,\n private readonly accessControlExportService: AccessControlExportService,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n this.accessControlService.loadRoles();\n }\n\n public openAddModal(): void {\n this.showAddModal$.next(true);\n }\n\n public onAdd(data: Role | null): void {\n this.showAddModal$.next(false);\n\n if (!data) {\n return;\n }\n\n this.accessControlService.dispatchAction(\n this.accessControlService.addRole(data).pipe(\n finalize(() => {\n this.showAddModal$.next(false);\n })\n )\n );\n }\n\n public showDeleteModal(): void {\n this.setSelectedRoleKeys();\n this.showDeleteModal$.next(true);\n }\n\n public showExportModal(): void {\n this.setSelectedRoleKeys();\n this.showExportModal$.next(true);\n }\n\n public closeExportModal(): void {\n this.showExportModal$.next(false);\n }\n\n public onDelete(roles: Array<string>): void {\n this.enableSkeleton();\n\n this.accessControlService.dispatchAction(\n this.accessControlService.deleteRoles({roles}).pipe(\n finalize(() => {\n this.disableSkeleton();\n })\n )\n );\n }\n\n public onExport(event: ExportRoleOutput): void {\n this.exportDisabled$.next(true);\n\n this.accessControlExportService\n .exportRoles(event)\n .pipe(\n tap(() => {\n this.resetExportType$.next(null);\n }),\n delay(CARBON_CONSTANTS.modalAnimationMs),\n tap(() => {\n this.exportDisabled$.next(false);\n })\n )\n .subscribe();\n }\n\n public onRowClick(role: Role): void {\n this.router.navigate([`/access-control/${role.roleKey}`]);\n }\n\n private enableSkeleton(): void {\n this.skeleton$.next(true);\n }\n\n private disableSkeleton(): void {\n this.skeleton$.next(false);\n }\n\n private setSelectedRoleKeys(): void {\n this.selectedRowKeys$.next(this.carbonList.selectedItems.map((role: Role) => role.roleKey));\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n [header]=\"false\"\n [items]=\"roles$ | async\"\n [fields]=\"fields\"\n [loading]=\"loading$ | async\"\n [showSelectionColumn]=\"true\"\n (rowClicked)=\"onRowClick($event)\"\n>\n <ng-container header> {{ 'accessControl.roles.title' | translate }} </ng-container>\n\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addRoleButton\"></ng-container>\n </div>\n\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showDeleteModal()\">\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n\n <button cdsButton=\"primary\" (click)=\"showExportModal()\">\n {{ 'interface.export' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addRoleButton\"\n description=\"{{ 'accessControl.roles.noResults.description' | translate }}\"\n title=\"{{ 'accessControl.roles.noResults.title' | translate }}\"\n ></valtimo-no-results>\n</valtimo-carbon-list>\n\n<valtimo-role-metadata-modal\n [open]=\"showAddModal$ | async\"\n (closeEvent)=\"onAdd($event)\"\n></valtimo-role-metadata-modal>\n\n<ng-container *ngIf=\"{selectedRowKeys: selectedRowKeys$ | async} as obs\">\n <valtimo-delete-role-modal\n [deleteRowKeys]=\"obs.selectedRowKeys\"\n [showDeleteModal$]=\"showDeleteModal$\"\n (deleteEvent)=\"onDelete($event)\"\n >\n </valtimo-delete-role-modal>\n\n <valtimo-export-role-modal\n [disabled]=\"exportDisabled$ | async\"\n [exportRowKeys]=\"obs.selectedRowKeys\"\n [open]=\"showExportModal$ | async\"\n [reset$]=\"resetExportType$\"\n (exportEvent)=\"onExport($event)\"\n (closeEvent)=\"closeExportModal()\"\n >\n </valtimo-export-role-modal>\n</ng-container>\n\n<ng-template #addRoleButton>\n <button cdsButton=\"primary\" (click)=\"openAddModal()\">\n {{ 'accessControl.roles.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ConditionOperator} from '../models';\n\nconst OPERATOR_LABEL: Record<ConditionOperator, string> = {\n '==': 'accessControl.overview.operators.eq',\n '!=': 'accessControl.overview.operators.neq',\n '>': 'accessControl.overview.operators.gt',\n '>=': 'accessControl.overview.operators.gte',\n '<': 'accessControl.overview.operators.lt',\n '<=': 'accessControl.overview.operators.lte',\n in: 'accessControl.overview.operators.in',\n list_contains: 'accessControl.overview.operators.list_contains',\n};\n\nconst NO_CONTEXT_RESOURCE_TYPE = 'com.ritense.authorization.NoContext';\n\nexport {NO_CONTEXT_RESOURCE_TYPE, OPERATOR_LABEL};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './access-control-labels';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {TranslateService} from '@ngx-translate/core';\nimport {OPERATOR_LABEL} from '../constants';\nimport {ConditionOperator} from '../models';\n\nconst SPECIAL_VALUE_PATTERN = /^\\$\\{([A-Za-z_$][A-Za-z0-9_$]*)\\}$/;\n\nfunction lowerFirst(s: string): string {\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n\nfunction upperFirst(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction resourceTypeI18nKey(fqn: string): string | null {\n const lastSegment = fqn.split('.').pop();\n if (!lastSegment) return null;\n return `accessControl.resourceTypes.${lowerFirst(lastSegment)}`;\n}\n\nfunction fieldI18nKey(resourceType: string, field: string): string | null {\n const resourceSegment = resourceType.split('.').pop();\n if (!resourceSegment || !field) return null;\n const fieldSegment = field\n .split('.')\n .map((part, i) => (i === 0 ? part : upperFirst(part)))\n .join('');\n return `accessControl.overview.fields.${lowerFirst(resourceSegment)}.${fieldSegment}`;\n}\n\nfunction tryTranslate(translate: TranslateService, key: string): string | null {\n const translated = translate.instant(key);\n return translated === key ? null : translated;\n}\n\nfunction formatResourceType(translate: TranslateService, fqn: string): string {\n const key = resourceTypeI18nKey(fqn);\n const translated = key ? tryTranslate(translate, key) : null;\n if (translated !== null) return translated;\n const segments = fqn.split('.');\n return segments[segments.length - 1] || fqn;\n}\n\nfunction formatField(translate: TranslateService, resourceType: string, field: string): string {\n const key = fieldI18nKey(resourceType, field);\n const translated = key ? tryTranslate(translate, key) : null;\n if (translated !== null) return translated;\n return humanizeFieldPath(field);\n}\n\nfunction formatOperator(translate: TranslateService, operator: ConditionOperator): string {\n const key = OPERATOR_LABEL[operator];\n return key ? translate.instant(key) : operator;\n}\n\nfunction formatValue(translate: TranslateService, value: unknown): string {\n if (value === null) {\n return translate.instant('accessControl.overview.specialValues.null');\n }\n if (typeof value === 'string') {\n if (value === '') return translate.instant('accessControl.overview.specialValues.empty');\n const match = SPECIAL_VALUE_PATTERN.exec(value);\n if (match) {\n const key = `accessControl.overview.specialValues.${match[1]}`;\n const translated = tryTranslate(translate, key);\n if (translated !== null) return translated;\n }\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(item => formatValue(translate, item)).join(', ');\n }\n return String(value);\n}\n\nfunction humanizeFieldPath(field: string): string {\n return field\n .split('.')\n .map(part => part.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase())\n .join(' ');\n}\n\nexport {formatField, formatOperator, formatResourceType, formatValue, humanizeFieldPath};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './format-condition';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {EditorModel, EditorModule, OverflowMenuComponent} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n IconService,\n ListItem,\n} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, map, Observable, skip, Subscription, take} from 'rxjs';\nimport {AccessControlFilter, Permission, PermissionSchema} from '../../models';\nimport {PermissionSchemaMetadataService} from '../../services';\nimport {formatResourceType} from '../../utils';\n\n@Component({\n standalone: true,\n selector: 'valtimo-access-control-json-editor-tab',\n templateUrl: './access-control-json-editor-tab.component.html',\n styleUrls: ['./access-control-json-editor-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n EditorModule,\n IconModule,\n OverflowMenuComponent,\n ],\n})\nexport class AccessControlJsonEditorTabComponent implements OnInit, OnChanges, OnDestroy {\n @Input() public disabled: boolean | null = false;\n @Input() public model!: EditorModel;\n\n @Output() public validEvent = new EventEmitter<boolean>();\n @Output() public valueChangeEvent = new EventEmitter<string>();\n\n private readonly _sourceModel$ = new BehaviorSubject<EditorModel | null>(null);\n private readonly _filter$ = new BehaviorSubject<AccessControlFilter>({\n resourceType: null,\n action: null,\n });\n private readonly _subscriptions = new Subscription();\n\n public readonly isFilterActive$: Observable<boolean> = this._filter$.pipe(\n map(({resourceType, action}) => !!resourceType || !!action)\n );\n\n public readonly resourceTypeItems$: Observable<ListItem[]> = combineLatest([\n this._sourceModel$,\n this._filter$,\n ]).pipe(\n map(([sourceModel, currentFilter]) => {\n const permissions = this.parsePermissions(sourceModel);\n const resourceTypes = Array.from(\n new Set(permissions.map(p => p.resourceType).filter(Boolean))\n ).sort();\n\n return resourceTypes.map(resourceType => ({\n content: formatResourceType(this.translateService, resourceType),\n resourceType,\n selected: currentFilter.resourceType === resourceType,\n }));\n })\n );\n\n public readonly actionItems$: Observable<ListItem[]> = combineLatest([\n this._sourceModel$,\n this._filter$,\n ]).pipe(\n map(([sourceModel, currentFilter]) => {\n const permissions = this.parsePermissions(sourceModel);\n const scoped = currentFilter.resourceType\n ? permissions.filter(p => p.resourceType === currentFilter.resourceType)\n : permissions;\n const actions = Array.from(\n new Set(\n scoped.flatMap(p => [...(p.actions ?? []), ...(p.action ? [p.action] : [])])\n )\n ).sort();\n\n return actions.map(action => ({\n content: this.translateService.instant(`accessControl.actions.${action}`),\n action,\n selected: currentFilter.action === action,\n }));\n })\n );\n\n public readonly filteredModel$: Observable<EditorModel | null> = combineLatest([\n this._sourceModel$,\n this._filter$,\n ]).pipe(\n map(([sourceModel, currentFilter]) => {\n if (!sourceModel) return null;\n if (!currentFilter.resourceType && !currentFilter.action) return sourceModel;\n\n const permissions = this.parsePermissions(sourceModel);\n const filtered = permissions.filter(permission => {\n const resourceMatch =\n !currentFilter.resourceType || permission.resourceType === currentFilter.resourceType;\n const actionMatch =\n !currentFilter.action ||\n (permission.actions ?? []).includes(currentFilter.action) ||\n permission.action === currentFilter.action;\n return resourceMatch && actionMatch;\n });\n\n return {\n ...sourceModel,\n value: JSON.stringify(filtered, null, 2),\n };\n })\n );\n\n public readonly editorDisabled$: Observable<boolean> = this._filter$.pipe(\n map(({resourceType, action}) => !!resourceType || !!action)\n );\n\n public readonly permissionSchema$: Observable<PermissionSchema> = this.metadataService.schema$;\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly metadataService: PermissionSchemaMetadataService,\n private readonly router: Router,\n private readonly translateService: TranslateService\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.activatedRoute.queryParamMap.pipe(take(1)).subscribe(params => {\n this._filter$.next({\n resourceType: params.get('filterResourceType'),\n action: params.get('filterAction'),\n });\n });\n\n this._subscriptions.add(\n this._filter$.pipe(skip(1)).subscribe(currentFilter => {\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams: {\n filterResourceType: currentFilter.resourceType ?? null,\n filterAction: currentFilter.action ?? null,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['model']) {\n this._sourceModel$.next(this.model);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onValid(valid: boolean): void {\n this.validEvent.emit(valid);\n }\n\n public onValueChange(value: string): void {\n if (this._filter$.getValue().resourceType || this._filter$.getValue().action) return;\n this.valueChangeEvent.emit(value);\n }\n\n public onResourceTypeSelected(event: {item?: ListItem & {resourceType?: string}}): void {\n const resourceType = event.item?.resourceType ?? null;\n this._filter$.next({...this._filter$.getValue(), resourceType, action: null});\n }\n\n public onActionSelected(event: {item?: ListItem & {action?: string}}): void {\n const action = event.item?.action ?? null;\n this._filter$.next({...this._filter$.getValue(), action});\n }\n\n public onClearFilter(): void {\n this._filter$.next({resourceType: null, action: null});\n }\n\n private parsePermissions(model: EditorModel | null): Permission[] {\n if (!model?.value) return [];\n try {\n const parsed = JSON.parse(model.value);\n return Array.isArray(parsed) ? (parsed as Permission[]) : [];\n } catch {\n return [];\n }\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n filteredModel: filteredModel$ | async,\n editorDisabled: editorDisabled$ | async,\n permissionSchema: permissionSchema$ | async,\n } as obs\"\n class=\"json-editor-tab\"\n>\n <div class=\"json-editor-tab__toolbar\">\n <v-overflow-menu placement=\"bottom-end\" [closeOnSelect]=\"false\">\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n class=\"json-editor-tab__filter-trigger\"\n [class.json-editor-tab__filter-trigger--active]=\"isFilterActive$ | async\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"filterPane\"></ng-container>\n </div>\n </v-overflow-menu>\n </div>\n\n <valtimo-editor\n *ngIf=\"obs.permissionSchema\"\n [disabled]=\"obs.editorDisabled || disabled\"\n [fitPage]=\"true\"\n [jsonSchema]=\"obs.permissionSchema\"\n [model]=\"obs.filteredModel\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-editor>\n</div>\n\n<ng-template #filterPane>\n <form class=\"json-editor-tab__filter\" (click)=\"$event.stopImmediatePropagation()\">\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.resourceType' | translate\"\n [placeholder]=\"'accessControl.filter.allResourceTypes' | translate\"\n (selected)=\"onResourceTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"resourceTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [appendInline]=\"true\"\n [label]=\"'accessControl.filter.action' | translate\"\n [placeholder]=\"'accessControl.filter.allActions' | translate\"\n (selected)=\"onActionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"actionItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n</ng-template>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport {formatResourceType} from '../utils';\n\n@Pipe({\n standalone: true,\n name: 'resourceTypeLabel',\n})\nexport class ResourceTypeLabelPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(fqn: string | null | undefined): string {\n if (!fqn) return '';\n return formatResourceType(this.translateService, fqn);\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './resource-type-label.pipe';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {BehaviorSubject, combineLatest, map, Observable} from 'rxjs';\nimport {NO_CONTEXT_RESOURCE_TYPE} from '../../constants';\nimport {\n ContainerCondition,\n ExpressionCondition,\n FieldCondition,\n Permission,\n PermissionCondition,\n} from '../../models';\nimport {ResourceTypeLabelPipe} from '../../pipes';\nimport {PermissionSchemaMetadataService} from '../../services';\nimport {formatField, formatOperator, formatValue} from '../../utils';\n\ninterface FormattedFieldCondition {\n kind: 'field';\n field: string;\n operator: string;\n value: string;\n customField: boolean;\n}\n\ninterface FormattedExpressionCondition {\n kind: 'expression';\n field: string;\n path: string;\n operator: string;\n value: string;\n clazz: string;\n customField: boolean;\n}\n\ninterface FormattedContainerCondition {\n kind: 'container';\n resourceType: string;\n conditions: PermissionCondition[];\n customResource: boolean;\n}\n\ntype FormattedCondition =\n | FormattedFieldCondition\n | FormattedExpressionCondition\n | FormattedContainerCondition;\n\ninterface ActionOverview {\n action: string;\n grants: Permission[];\n}\n\ninterface ResourceOverview {\n resourceType: string;\n actions: ActionOverview[];\n}\n\n@Component({\n standalone: true,\n selector: 'valtimo-access-control-overview-tab',\n templateUrl: './access-control-overview-tab.component.html',\n styleUrls: ['./access-control-overview-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: true,\n imports: [CommonModule, RouterModule, TranslateModule, ResourceTypeLabelPipe],\n})\nexport class AccessControlOverviewTabComponent {\n @Input() public roleKey: string | null = null;\n\n @Input()\n public set permissions(value: Permission[] | null) {\n this._permissions$.next(value ?? []);\n }\n\n private readonly _permissions$ = new BehaviorSubject<Permission[]>([]);\n\n public readonly overview$: Observable<ResourceOverview[]> = combineLatest([\n this._permissions$,\n this.metadataService.allResourceTypes$,\n this.metadataService.actionsByResourceType$,\n ]).pipe(\n map(([permissions, allResourceTypes, actionsByResourceType]) =>\n this.buildOverview(permissions, allResourceTypes, actionsByResourceType)\n )\n );\n\n constructor(\n private readonly metadataService: PermissionSchemaMetadataService,\n private readonly translateService: TranslateService\n ) {}\n\n public formatConditions(\n conditions: PermissionCondition[] | null | undefined,\n resourceType: string\n ): FormattedCondition[] {\n return (conditions ?? []).map(condition => this.formatCondition(condition, resourceType));\n }\n\n public isNoContext(contextResourceType: string | null | undefined): boolean {\n return contextResourceType === NO_CONTEXT_RESOURCE_TYPE;\n }\n\n private buildOverview(\n permissions: Permission[],\n allResourceTypes: string[],\n actionsByResourceType: Record<string, string[]>\n ): ResourceOverview[] {\n const knownResourceTypes = new Set(allResourceTypes);\n const extraResourceTypes = permissions\n .map(p => p.resourceType)\n .filter(rt => !!rt && !knownResourceTypes.has(rt));\n const resourceTypes = [...allResourceTypes, ...Array.from(new Set(extraResourceTypes))];\n\n return resourceTypes.map(resourceType => {\n const forResource = permissions.filter(p => p.resourceType === resourceType);\n const allowedActions = actionsByResourceType[resourceType] ?? [];\n const allowedSet = new Set(allowedActions);\n const extraActions = forResource\n .flatMap(p => [...(p.actions ?? []), ...(p.action ? [p.action] : [])])\n .filter(a => !!a && !allowedSet.has(a));\n const actions = [...allowedActions, ...Array.from(new Set(extraActions))];\n\n return {\n resourceType,\n actions: actions.map(action => ({\n action,\n grants: forResource.filter(p => this.permissionGrants(p, action)),\n })),\n };\n });\n }\n\n private permissionGrants(permission: Permission, action: string): boolean {\n if (permission.action === action) return true;\n return (permission.actions ?? []).includes(action);\n }\n\n private formatCondition(\n condition: PermissionCondition,\n resourceType: string\n ): FormattedCondition {\n if (condition.type === 'container') {\n return this.formatContainer(condition);\n }\n if (condition.type === 'expression') {\n return this.formatExpression(condition, resourceType);\n }\n return this.formatField(condition, resourceType);\n }\n\n private formatField(condition: FieldCondition, resourceType: string): FormattedFieldCondition {\n return {\n kind: 'field',\n field: formatField(this.translateService, resourceType, condition.field),\n operator: formatOperator(this.translateService, condition.operator),\n value: formatValue(this.translateService, condition.value),\n customField: !this.metadataService.isFieldKnown(resourceType, condition.field),\n };\n }\n\n private formatExpression(\n condition: ExpressionCondition,\n resourceType: string\n ): FormattedExpressionCondition {\n return {\n kind: 'expression',\n field: formatField(this.translateService, resourceType, condition.field),\n path: condition.path,\n operator: formatOperator(this.translateService, condition.operator),\n value: formatValue(this.translateService, condition.value),\n clazz: condition.clazz,\n customField: !this.metadataService.isFieldKnown(resourceType, condition.field),\n };\n }\n\n private formatContainer(condition: ContainerCondition): FormattedContainerCondition {\n return {\n kind: 'container',\n resourceType: condition.resourceType,\n conditions: condition.conditions ?? [],\n customResource: !this.metadataService.isResourceTypeKnown(condition.resourceType),\n };\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div *ngIf=\"overview$ | async as overview\" class=\"ac\">\n @for (resource of overview; track resource.resourceType) {\n <section class=\"ac__group\">\n <h4 class=\"ac__heading\">\n @if (roleKey) {\n <a\n class=\"ac__heading-link\"\n [routerLink]=\"['/access-control', roleKey, 'json-editor']\"\n [queryParams]=\"{filterResourceType: resource.resourceType}\"\n >\n {{ resource.resourceType | resourceTypeLabel }}\n <span class=\"ac__fqn\">({{ resource.resourceType }})</span>\n </a>\n } @else {\n {{ resource.resourceType | resourceTypeLabel }}\n <span class=\"ac__fqn\">({{ resource.resourceType }})</span>\n }\n </h4>\n\n @for (entry of resource.actions; track entry.action) {\n <div class=\"ac__action\">\n @if (entry.grants.length) {\n <span class=\"ac__connective\">{{ 'accessControl.overview.can' | translate }}</span>\n @if (roleKey) {\n <a\n class=\"ac__action-link\"\n [routerLink]=\"['/access-control', roleKey, 'json-editor']\"\n [queryParams]=\"{\n filterResourceType: resource.resourceType,\n filterAction: entry.action,\n }\"\n >\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n </a>\n } @else {\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n }\n\n @for (perm of entry.grants; track $index; let isFirst = $first) {\n @if (!isFirst) {\n <div class=\"ac__or ac__connective\">{{\n 'accessControl.overview.or' | translate\n }}</div>\n }\n <div class=\"ac__grant\">\n @if (perm.conditions?.length) {\n <div class=\"ac__connective\">{{\n 'accessControl.overview.when' | translate\n }}</div>\n <ng-container\n *ngTemplateOutlet=\"\n conditionsTpl;\n context: {\n conditions: perm.conditions,\n resourceType: perm.resourceType,\n }\n \"\n ></ng-container>\n } @else if (!perm.contextResourceType) {\n <div class=\"ac__connective\">{{\n 'accessControl.overview.unconditional' | translate\n }}</div>\n }\n\n @if (perm.contextResourceType) {\n @if (isNoContext(perm.contextResourceType)) {\n <div class=\"ac__connective\">{{\n 'accessControl.overview.noContext' | translate\n }}</div>\n } @else {\n <div>\n <span class=\"ac__connective\">{{\n 'accessControl.overview.inContextOf' | translate\n }}</span>\n <span class=\"ac__resource-type\">{{\n perm.contextResourceType | resourceTypeLabel\n }}</span>\n @if (perm.contextConditions?.length) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.where' | translate\n }}</span>\n }\n </div>\n @if (perm.contextConditions?.length) {\n <ng-container\n *ngTemplateOutlet=\"\n conditionsTpl;\n context: {\n conditions: perm.contextConditions,\n resourceType: perm.contextResourceType,\n }\n \"\n ></ng-container>\n }\n }\n }\n </div>\n }\n } @else {\n <span class=\"ac__no-access\">{{\n 'accessControl.overview.cannot' | translate\n }}</span>\n @if (roleKey) {\n <a\n class=\"ac__action-link\"\n [routerLink]=\"['/access-control', roleKey, 'json-editor']\"\n [queryParams]=\"{\n filterResourceType: resource.resourceType,\n filterAction: entry.action,\n }\"\n >\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n </a>\n } @else {\n <span class=\"ac__action-name\">{{\n 'accessControl.actions.' + entry.action | translate\n }}</span>\n }\n }\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template #conditionsTpl let-conditions=\"conditions\" let-resourceType=\"resourceType\">\n <div class=\"ac__conditions\">\n @for (\n condition of formatConditions(conditions, resourceType);\n track $index;\n let isFirst = $first\n ) {\n <div class=\"ac__condition\">\n @if (!isFirst) {\n <span class=\"ac__connective\">{{ 'accessControl.overview.and' | translate }}</span>\n }\n @switch (condition.kind) {\n @case ('field') {\n <span>{{ condition.field }}</span>\n @if (condition.customField) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.customField' | translate\n }}</span>\n }\n <span class=\"ac__operator\">{{ condition.operator }}</span>\n <span>{{ condition.value }}</span>\n }\n\n @case ('expression') {\n <span>{{ condition.field }}</span>\n @if (condition.customField) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.customField' | translate\n }}</span>\n }\n <span class=\"ac__connective\">{{\n 'accessControl.overview.atJsonPath' | translate\n }}</span>\n <code class=\"ac__path\" [title]=\"condition.clazz\">{{ condition.path }}</code>\n <span class=\"ac__operator\">{{ condition.operator }}</span>\n <span>{{ condition.value }}</span>\n }\n\n @case ('container') {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.relatedResource' | translate\n }}</span>\n <span class=\"ac__resource-type\">{{\n condition.resourceType | resourceTypeLabel\n }}</span>\n @if (condition.customResource) {\n <span class=\"ac__connective\">{{\n 'accessControl.overview.customResource' | translate\n }}</span>\n }\n <span class=\"ac__connective\">{{\n 'accessControl.overview.where' | translate\n }}</span>\n <ng-container\n *ngTemplateOutlet=\"\n conditionsTpl;\n context: {\n conditions: condition.conditions,\n resourceType: condition.resourceType,\n }\n \"\n ></ng-container>\n }\n }\n </div>\n }\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit, signal} from '@angular/core';\nimport {AccessControlService} from '../../services/access-control.service';\nimport {BehaviorSubject, filter, finalize, map, Subscription, switchMap, take, tap} from 'rxjs';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {EditorModel, PageHeaderService, PageTitleService} from '@valtimo/components';\nimport {AccessControlEditorTab, Permission, Role} from '../../models';\nimport {TranslateService} from '@ngx-translate/core';\nimport {AccessControlExportService} from '../../services/access-control-export.service';\nimport {GlobalNotificationService} from '@valtimo/shared';\n\n@Component({\n standalone: false,\n templateUrl: './access-control-editor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./access-control-editor.component.scss'],\n})\nexport class AccessControlEditorComponent implements OnInit, OnDestroy {\n public readonly model$ = new BehaviorSubject<EditorModel | null>(null);\n public readonly permissions$ = new BehaviorSubject<Permission[] | null>(null);\n public readonly roleKey$ = new BehaviorSubject<string | null>(null);\n public readonly saveDisabled$ = new BehaviorSubject<boolean>(true);\n public readonly editorDisabled$ = new BehaviorSubject<boolean>(false);\n public readonly moreDisabled$ = new BehaviorSubject<boolean>(true);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly showEditModal$ = new BehaviorSubject<boolean>(false);\n public readonly selectedRowKeys$ = new BehaviorSubject<Array<string> | null>(null);\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n public readonly $activeTab = signal<AccessControlEditorTab>(AccessControlEditorTab.SUMMARY);\n\n protected readonly AccessControlEditorTab = AccessControlEditorTab;\n\n private _roleKeySubscription!: Subscription;\n private _roleKey!: string;\n private readonly _updatedModelValue$ = new BehaviorSubject<string>('');\n\n constructor(\n private readonly accessControlService: AccessControlService,\n private readonly route: ActivatedRoute,\n private readonly pageTitleService: PageTitleService,\n private readonly router: Router,\n private readonly globalNotificationService: GlobalNotificationService,\n private readonly translateService: TranslateService,\n private readonly accessControlExportService: AccessControlExportService,\n private readonly pageHeaderService: PageHeaderService\n ) {}\n\n public ngOnInit(): void {\n this.restoreActiveTabFromUrl();\n this.getPermissions();\n this.openRoleKeySubscription();\n }\n\n public ngOnDestroy(): void {\n this.pageTitleService.enableReset();\n this._roleKeySubscription?.unsubscribe();\n }\n\n public onValid(valid: boolean): void {\n this.saveDisabled$.next(valid === false);\n }\n\n public onValueChange(value: string): void {\n this._updatedModelValue$.next(value);\n }\n\n public updatePermissions(): void {\n this.disableEditor();\n this.disableSave();\n this.disableMore();\n\n this._updatedModelValue$\n .pipe(\n take(1),\n switchMap(updatedModelValue =>\n this.accessControlService.updateRolePermissions(\n this._roleKey,\n JSON.parse(updatedModelValue)\n )\n )\n )\n .subscribe({\n next: result => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n this.showSuccessMessage(this._roleKey);\n this.setModel(result);\n },\n error: () => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n },\n });\n }\n\n public onDelete(roles: Array<string>): void {\n this.disableEditor();\n this.disableSave();\n this.disableMore();\n\n this.accessControlService.dispatchAction(\n this.accessControlService.deleteRoles({roles}).pipe(\n finalize(() => {\n this.router.navigate(['/access-control']);\n })\n )\n );\n }\n\n public showDeleteModal(): void {\n this.showDeleteModal$.next(true);\n }\n\n public showEditModal(): void {\n this.showEditModal$.next(true);\n }\n\n public onEdit(currentRoleKey: string, data: Role | null): void {\n this.showEditModal$.next(false);\n\n if (!data) {\n return;\n }\n\n this.disableEditor();\n this.disableSave();\n this.disableMore();\n\n this.accessControlService.updateRole(currentRoleKey, data).subscribe(() => {\n this.router.navigate([`/access-control/${data.roleKey}`]);\n this.showSuccessMessage(data.roleKey);\n });\n }\n\n public setActiveTab(tab: AccessControlEditorTab): void {\n if (this.$activeTab() === tab) return;\n\n const roleKey = this.route.snapshot.paramMap.get('id');\n if (!roleKey) {\n this.$activeTab.set(tab);\n return;\n }\n\n const segments =\n tab === AccessControlEditorTab.JSON_EDITOR\n ? ['/access-control', roleKey, 'json-editor']\n : ['/access-control', roleKey];\n\n this.router.navigate(segments);\n }\n\n private restoreActiveTabFromUrl(): void {\n const url = this.route.snapshot.url;\n const lastSegment = url[url.length - 1]?.path;\n if (lastSegment === 'json-editor') {\n this.$activeTab.set(AccessControlEditorTab.JSON_EDITOR);\n return;\n }\n\n const params = this.route.snapshot.queryParamMap;\n if (params.get('filterResourceType') || params.get('filterAction')) {\n this.$activeTab.set(AccessControlEditorTab.JSON_EDITOR);\n }\n }\n\n public exportPermissions(): void {\n this.accessControlExportService\n .exportRoles({type: 'separate', roleKeys: [this._roleKey]})\n .subscribe();\n }\n\n private openRoleKeySubscription(): void {\n this._roleKeySubscription = this.route.params\n .pipe(\n filter(params => params?.id),\n map(params => params.id),\n tap(roleKey => {\n this._roleKey = roleKey;\n this.roleKey$.next(roleKey);\n this.pageTitleService.setCustomPageTitle(roleKey, true);\n this.selectedRowKeys$.next([roleKey]);\n }),\n switchMap(roleKey => this.accessControlService.getRolePermissions(roleKey)),\n tap(permissions => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n this.setModel(permissions);\n })\n )\n .subscribe();\n }\n\n private getPermissions(): void {\n this.route.params\n .pipe(\n tap(params => {\n this.pageTitleService.setCustomPageTitle(params?.id);\n this.roleKey$.next(params?.id ?? null);\n this.selectedRowKeys$.next([params?.id]);\n }),\n switchMap(params => this.accessControlService.getRolePermissions(params.id))\n )\n .subscribe(permissions => {\n this.enableMore();\n this.enableSave();\n this.enableEditor();\n this.setModel(permissions);\n });\n }\n\n private setModel(permissions: object): void {\n const roleKey = this.roleKey$.value ?? 'unknown';\n this.model$.next({\n value: JSON.stringify(permissions),\n language: 'json',\n uri: `inmemory://access-control/role-${roleKey}.access-control-permissions.json`,\n });\n this.permissions$.next(Array.isArray(permissions) ? (permissions as Permission[]) : null);\n }\n\n private disableMore(): void {\n this.moreDisabled$.next(true);\n }\n\n private enableMore(): void {\n this.moreDisabled$.next(false);\n }\n\n private disableSave(): void {\n this.saveDisabled$.next(true);\n }\n\n private enableSave(): void {\n this.saveDisabled$.next(false);\n }\n\n private disableEditor(): void {\n this.editorDisabled$.next(true);\n }\n\n private enableEditor(): void {\n this.editorDisabled$.next(false);\n }\n\n private showSuccessMessage(roleKey: string): void {\n this.globalNotificationService.showToast({\n title: this.translateService.instant('accessControl.roles.savedSuccessTitle'),\n caption: this.translateService.instant('accessControl.roles.savedSuccessTitleMessage', {\n roleKey,\n }),\n type: 'success',\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"model$ | async as model; else loading\">\n <cds-tabs type=\"contained\">\n <cds-tab\n [active]=\"$activeTab() === AccessControlEditorTab.SUMMARY\"\n [heading]=\"'accessControl.roles.tabs.summary' | translate\"\n (selected)=\"setActiveTab(AccessControlEditorTab.SUMMARY)\"\n >\n <valtimo-access-control-overview-tab\n *ngIf=\"$activeTab() === AccessControlEditorTab.SUMMARY\"\n [permissions]=\"permissions$ | async\"\n [roleKey]=\"roleKey$ | async\"\n ></valtimo-access-control-overview-tab>\n </cds-tab>\n\n <cds-tab\n [active]=\"$activeTab() === AccessControlEditorTab.JSON_EDITOR\"\n [heading]=\"'accessControl.roles.tabs.jsonEditor' | translate\"\n (selected)=\"setActiveTab(AccessControlEditorTab.JSON_EDITOR)\"\n >\n <valtimo-access-control-json-editor-tab\n *ngIf=\"$activeTab() === AccessControlEditorTab.JSON_EDITOR\"\n [disabled]=\"editorDisabled$ | async\"\n [model]=\"model\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-access-control-json-editor-tab>\n </cds-tab>\n </cds-tabs>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n *ngIf=\"{\n model: model$ | async,\n moreDisabled: moreDisabled$ | async,\n compactMode: compactMode$ | async,\n } as obs\"\n class=\"buttons-container\"\n >\n <v-overflow-menu class=\"overflow-button\" placement=\"bottom-end\">\n <v-overflow-menu-trigger overflowTrigger></v-overflow-menu-trigger>\n <v-overflow-menu-option [disabled]=\"obs.moreDisabled\" (selected)=\"showEditModal()\">{{\n 'accessControl.roles.editMetadata' | translate\n }}</v-overflow-menu-option>\n\n <v-overflow-menu-option [disabled]=\"obs.moreDisabled\" (selected)=\"exportPermissions()\">{{\n 'interface.export' | translate\n }}</v-overflow-menu-option>\n\n <v-overflow-menu-option\n [disabled]=\"obs.moreDisabled\"\n type=\"danger\"\n (selected)=\"showDeleteModal()\"\n >{{ 'interface.delete' | translate }}</v-overflow-menu-option\n >\n </v-overflow-menu>\n\n <button\n [disabled]=\"saveDisabled$ | async\"\n cdsButton=\"primary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"updatePermissions()\"\n >\n {{ 'interface.save' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"save\" size=\"16\"></svg>\n </button>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"{selectedRowKeys: selectedRowKeys$ | async} as obs\">\n <valtimo-delete-role-modal\n [deleteRowKeys]=\"obs.selectedRowKeys\"\n [showDeleteModal$]=\"showDeleteModal$\"\n (deleteEvent)=\"onDelete($event)\"\n >\n </valtimo-delete-role-modal>\n\n <valtimo-role-metadata-modal\n [defaultKeyValue]=\"obs.selectedRowKeys[0]\"\n [open]=\"showEditModal$ | async\"\n type=\"edit\"\n (closeEvent)=\"onEdit(obs.selectedRowKeys[0], $event)\"\n ></valtimo-role-metadata-modal>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AuthGuardService} from '@valtimo/security';\nimport {AccessControlOverviewComponent} from './components/overview/access-control-overview.component';\nimport {AccessControlEditorComponent} from './components/editor/access-control-editor.component';\n\nconst routes: Routes = [\n {\n path: 'access-control',\n component: AccessControlOverviewComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Access control', roles: [ROLE_ADMIN]},\n },\n {\n path: 'access-control/:id',\n component: AccessControlEditorComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Role details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n },\n },\n {\n path: 'access-control/:id/json-editor',\n component: AccessControlEditorComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Role details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n },\n },\n];\n\n@NgModule({\n imports: [CommonModule, RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AccessControlManagementRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n RenderInPageHeaderDirective,\n} from '@valtimo/components';\nimport {AccessControlManagementRoutingModule} from './access-control-management-routing.module';\nimport {AccessControlOverviewComponent} from './components/overview/access-control-overview.component';\nimport {RoleMetadataModalComponent} from './components/role-metadata-modal/role-metadata-modal.component';\nimport {\n ButtonModule,\n IconModule,\n InputModule,\n LoadingModule,\n ModalModule,\n NotificationModule,\n TabsModule,\n} from 'carbon-components-angular';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {AccessControlEditorComponent} from './components/editor/access-control-editor.component';\nimport {AccessControlJsonEditorTabComponent} from './components/access-control-json-editor-tab/access-control-json-editor-tab.component';\nimport {AccessControlOverviewTabComponent} from './components/access-control-overview-tab/access-control-overview-tab.component';\nimport {DeleteRoleModalComponent} from './components/delete-role-modal/delete-role-modal.component';\nimport {ExportRoleModalComponent} from './components/export-role-modal/export-role-modal.component';\n\n@NgModule({\n declarations: [\n AccessControlOverviewComponent,\n RoleMetadataModalComponent,\n AccessControlEditorComponent,\n DeleteRoleModalComponent,\n ExportRoleModalComponent,\n ],\n imports: [\n CommonModule,\n AccessControlManagementRoutingModule,\n ButtonModule,\n FormsModule,\n ModalModule,\n TranslateModule,\n ReactiveFormsModule,\n InputModule,\n IconModule,\n ConfirmationModalModule,\n RenderInPageHeaderDirective,\n LoadingModule,\n IconModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n NotificationModule,\n CarbonListModule,\n TabsModule,\n AccessControlJsonEditorTabComponent,\n AccessControlOverviewTabComponent,\n ],\n})\nexport class AccessControlManagementModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of access-control\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/access-control-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService","i1","i2","i3","i4","i2.AccessControlExportService","i5","i6","i7.RoleMetadataModalComponent","i8.DeleteRoleModalComponent","i9.ExportRoleModalComponent","i10","i3.PermissionSchemaMetadataService","i1.PermissionSchemaMetadataService","i6.AccessControlExportService","i7","i8","i9.AccessControlJsonEditorTabComponent","i10.AccessControlOverviewTabComponent","i11.RoleMetadataModalComponent","i12.DeleteRoleModalComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valtimo/access-control-management",
3
- "version": "13.34.0",
3
+ "version": "13.35.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "19.2.20",
6
6
  "@angular/core": "19.2.20"