@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
JavaScript
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