UNPKG

@abp/ng.permission-management

Version:

ABP Framework is a complete open-source infrastructure to create modern web applications by following the best practices and conventions of software development. This package is a part of the [ABP Framework](https://abp.io) and contains client-side files.

374 lines (369 loc) 31.5 kB
import * as i4 from '@abp/ng.core'; import { ConfigStateService, CoreModule } from '@abp/ng.core'; import * as i3 from '@abp/ng.theme.shared'; import { ToasterService, ThemeSharedModule } from '@abp/ng.theme.shared'; import { PermissionsService } from '@abp/ng.permission-management/proxy'; import * as i0 from '@angular/core'; import { inject, EventEmitter, signal, computed, ViewChildren, Output, Input, Component, NgModule } from '@angular/core'; import { concat, of } from 'rxjs'; import { take, switchMap, finalize, tap } from 'rxjs/operators'; import * as i1 from '@angular/common'; import * as i2 from '@angular/forms'; class PermissionManagementComponent { constructor() { this.service = inject(PermissionsService); this.configState = inject(ConfigStateService); this.toasterService = inject(ToasterService); this.hideBadges = false; this._visible = false; this.visibleChange = new EventEmitter(); this.data = { groups: [], entityDisplayName: '' }; this.permissions = []; this.selectThisTab = false; this.selectAllTab = false; this.disableSelectAllTab = false; this.disabledSelectAllInAllTabs = false; this.modalBusy = false; this.filter = signal(''); this.selectedGroupPermissions = []; this.permissionGroupSignal = signal([]); this.permissionGroups = computed(() => { const search = this.filter().toLowerCase().trim(); let groups = this.permissionGroupSignal(); if (!search) { this.setSelectedGroup(groups[0]); return groups; } const includesSearch = text => text.toLowerCase().includes(search); groups = groups.filter(group => group.permissions.some(permission => includesSearch(permission.displayName) || includesSearch(group.displayName))); if (groups.length) { this.setSelectedGroup(groups[0]); } else { this.selectedGroupPermissions = []; } return groups; }); this.trackByFn = (_, item) => item.name; } get visible() { return this._visible; } set visible(value) { if (value === this._visible) { return; } if (value) { this.openModal().subscribe(() => { this._visible = true; this.visibleChange.emit(true); concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes) .pipe(take(1)) .subscribe(() => { this.initModal(); }); }); } else { this.setSelectedGroup(null); this._visible = false; this.visibleChange.emit(false); this.filter.set(''); } } getChecked(name) { return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted; } setSelectedGroup(group) { this.selectedGroup = group; if (!this.selectedGroup) { this.selectedGroupPermissions = []; return; } const margin = `margin-${document.body.dir === 'rtl' ? 'right' : 'left'}.px`; const permissions = (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions || []; this.selectedGroupPermissions = permissions.map(permission => ({ ...permission, style: { [margin]: findMargin(permissions, permission) }, isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted, })); } setDisabled(permissions) { if (permissions.length) { this.disableSelectAllTab = permissions.every(permission => permission.isGranted && permission.grantedProviders?.every(p => p.providerName !== this.providerName)); } else { this.disableSelectAllTab = false; } } isGrantedByOtherProviderName(grantedProviders) { if (grantedProviders.length) { return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1; } return false; } onClickCheckbox(clickedPermission) { const { isGranted, grantedProviders } = clickedPermission; if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) { return; } this.setSelectedGroup(this.selectedGroup); setTimeout(() => { this.updatePermissionStatus(clickedPermission); this.updateSelectedGroupPermissions(clickedPermission); this.setParentClicked(clickedPermission); this.setTabCheckboxState(); this.setGrantCheckboxState(); }, 0); } updatePermissionStatus(clickedPermission) { this.permissions = this.permissions.map(permission => { const isExactMatch = clickedPermission.name == permission.name; const isParentOfPermission = clickedPermission.parentName === permission.name; const isChildOfPermission = clickedPermission.name === permission.parentName; if (isExactMatch) { return { ...permission, isGranted: !permission.isGranted }; } if (isChildOfPermission && permission.isGranted) { return { ...permission, isGranted: false }; } if (isParentOfPermission && !permission.isGranted) { return { ...permission, isGranted: true }; } return permission; }); } setParentClicked(clickedPermission) { if (clickedPermission.parentName) { const parentPermissions = findParentPermissions(this.permissions, clickedPermission); if (parentPermissions.length > 0) { const parentNames = new Set(parentPermissions.map(parent => parent.name)); this.permissions = this.permissions.map(per => { let updatedIsGranted = per.isGranted; if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) { updatedIsGranted = false; } if (parentNames.has(per.name)) { updatedIsGranted = true; } return { ...per, isGranted: updatedIsGranted }; }); } return; } this.permissions = this.permissions.map(per => { const parents = findParentPermissions(this.permissions, per); if (parents.length > 0) { const rootParent = parents[parents.length - 1]; if (rootParent.name === clickedPermission.name && !rootParent.isGranted) { return { ...per, isGranted: false }; } } return per; }); } updateSelectedGroupPermissions(clickedPermissions) { this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => { if (per.name === clickedPermissions.name) { per.isGranted = !per.isGranted; } return per; }); } setTabCheckboxState() { const selectablePermissions = this.selectedGroupPermissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName)); const selectedPermissions = selectablePermissions.filter(per => per.isGranted); const element = document.querySelector('#select-all-in-this-tabs'); if (!element) { return; } if (selectedPermissions.length === selectablePermissions.length) { element.indeterminate = false; this.selectThisTab = true; } else if (selectedPermissions.length === 0) { element.indeterminate = false; this.selectThisTab = false; } else { element.indeterminate = true; } } setGrantCheckboxState() { const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName)); const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted); const checkboxElement = document.querySelector('#select-all-in-all-tabs'); if (selectedAllPermissions.length === selectablePermissions.length) { checkboxElement.indeterminate = false; this.selectAllTab = true; } else if (selectedAllPermissions.length === 0) { checkboxElement.indeterminate = false; this.selectAllTab = false; } else { checkboxElement.indeterminate = true; } } onClickSelectThisTab() { this.selectedGroupPermissions.forEach(permission => { if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders)) return; const index = this.permissions.findIndex(per => per.name === permission.name); this.permissions = [ ...this.permissions.slice(0, index), { ...this.permissions[index], isGranted: !this.selectThisTab }, ...this.permissions.slice(index + 1), ]; }); this.setGrantCheckboxState(); } onClickSelectAll() { if (this.filter()) { this.filter.set(''); } this.permissions = this.permissions.map(permission => ({ ...permission, isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab, })); if (!this.disableSelectAllTab) { this.selectThisTab = !this.selectAllTab; this.setTabCheckboxState(); if (this.filter()) { this.setGrantCheckboxState(); } } this.onChangeGroup(this.selectedGroup); } onChangeGroup(group) { this.setDisabled(group.permissions); this.setSelectedGroup(group); this.setTabCheckboxState(); } submit() { const unchangedPermissions = getPermissions(this.data.groups); const changedPermissions = this.permissions .filter(per => (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted === per.isGranted ? false : true) .map(({ name, isGranted }) => ({ name, isGranted })); if (!changedPermissions.length) { this.visible = false; return; } this.modalBusy = true; this.service .update(this.providerName, this.providerKey, { permissions: changedPermissions }) .pipe(switchMap(() => this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null)), finalize(() => (this.modalBusy = false))) .subscribe(() => { this.visible = false; this.toasterService.success('AbpUi::SavedSuccessfully'); }); } openModal() { if (!this.providerKey || !this.providerName) { throw new Error('Provider Key and Provider Name are required.'); } return this.service.get(this.providerName, this.providerKey).pipe(tap((permissionRes) => { const { groups } = permissionRes || {}; this.data = permissionRes; this.permissionGroupSignal.set(groups); this.permissions = getPermissions(groups); this.setSelectedGroup(groups[0]); this.disabledSelectAllInAllTabs = this.permissions.every(per => per.isGranted && per.grantedProviders.every(provider => provider.providerName !== this.providerName)); })); } initModal() { // TODO: Refactor setTimeout(() => { this.setDisabled(this.selectedGroup?.permissions || []); this.setTabCheckboxState(); this.setGrantCheckboxState(); }); } getAssignedCount(groupName) { return this.permissions.reduce((acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc), 0); } shouldFetchAppConfig() { const currentUser = this.configState.getOne('currentUser'); if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey); if (this.providerName === 'U') return currentUser.id === this.providerKey; return false; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.8", type: PermissionManagementComponent, isStandalone: false, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">\r\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n </legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n", styles: [".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media (max-width: 768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: PermissionManagementComponent, decorators: [{ type: Component, args: [{ standalone: false, selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">\r\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n </legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n", styles: [".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media (max-width: 768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"] }] }], propDecorators: { providerName: [{ type: Input }], providerKey: [{ type: Input }], hideBadges: [{ type: Input }], entityDisplayName: [{ type: Input }], visible: [{ type: Input }], visibleChange: [{ type: Output }], selectAllInThisTabsRef: [{ type: ViewChildren, args: ['selectAllInThisTabsRef'] }], selectAllInAllTabsRef: [{ type: ViewChildren, args: ['selectAllInAllTabsRef'] }] } }); function findParentPermissions(permissions, permission) { const permissionMap = new Map(permissions.map(p => [p.name, p])); let currentPermission = permissionMap.get(permission.name) ?? null; const parentPermissions = []; while (currentPermission && currentPermission.parentName) { const parentPermission = permissionMap.get(currentPermission.parentName); if (!parentPermission) { break; } parentPermissions.push(parentPermission); currentPermission = parentPermission; } return parentPermissions; } function findMargin(permissions, permission) { const parentPermission = permissions.find(per => per.name === permission.parentName); if (parentPermission && parentPermission.parentName) { let margin = 20; return (margin += findMargin(permissions, parentPermission)); } return parentPermission ? 20 : 0; } function getPermissions(groups) { return groups.reduce((acc, val) => [ ...acc, ...val.permissions.map(p => ({ ...p, groupName: val.name || '' })), ], []); } class PermissionManagementModule { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.8", ngImport: i0, type: PermissionManagementModule, declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent] }); } static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: PermissionManagementModule, imports: [CoreModule, ThemeSharedModule] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: PermissionManagementModule, decorators: [{ type: NgModule, args: [{ declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent], }] }] }); /** * Generated bundle index. Do not edit. */ export { PermissionManagementComponent, PermissionManagementModule }; //# sourceMappingURL=abp-ng.permission-management.mjs.map