@abp/ng.permission-management 10.2.0 → 10.3.0-rc.2
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.
|
@@ -59,10 +59,10 @@ class PermissionsService {
|
|
|
59
59
|
body: input,
|
|
60
60
|
}, { apiName: this.apiName, ...config });
|
|
61
61
|
}
|
|
62
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
63
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
63
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsService, providedIn: 'root' }); }
|
|
64
64
|
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionsService, decorators: [{
|
|
66
66
|
type: Injectable,
|
|
67
67
|
args: [{
|
|
68
68
|
providedIn: 'root',
|
|
@@ -62,17 +62,17 @@ class PermissionManagementComponent {
|
|
|
62
62
|
this.toasterService = inject(ToasterService);
|
|
63
63
|
this.injector = inject(Injector);
|
|
64
64
|
this.document = inject(DOCUMENT);
|
|
65
|
-
this.providerNameInput = input('', { ...(ngDevMode ? { debugName: "providerNameInput" } : {}), alias: 'providerName' });
|
|
66
|
-
this.providerKeyInput = input('', { ...(ngDevMode ? { debugName: "providerKeyInput" } : {}), alias: 'providerKey' });
|
|
67
|
-
this.hideBadgesInput = input(false, { ...(ngDevMode ? { debugName: "hideBadgesInput" } : {}), alias: 'hideBadges' });
|
|
68
|
-
this.entityDisplayName = input(undefined, ...(ngDevMode ? [{ debugName: "entityDisplayName" }] : []));
|
|
69
|
-
this.visibleInput = input(false, { ...(ngDevMode ? { debugName: "visibleInput" } : {}), alias: 'visible' });
|
|
65
|
+
this.providerNameInput = input('', { ...(ngDevMode ? { debugName: "providerNameInput" } : /* istanbul ignore next */ {}), alias: 'providerName' });
|
|
66
|
+
this.providerKeyInput = input('', { ...(ngDevMode ? { debugName: "providerKeyInput" } : /* istanbul ignore next */ {}), alias: 'providerKey' });
|
|
67
|
+
this.hideBadgesInput = input(false, { ...(ngDevMode ? { debugName: "hideBadgesInput" } : /* istanbul ignore next */ {}), alias: 'hideBadges' });
|
|
68
|
+
this.entityDisplayName = input(undefined, ...(ngDevMode ? [{ debugName: "entityDisplayName" }] : /* istanbul ignore next */ []));
|
|
69
|
+
this.visibleInput = input(false, { ...(ngDevMode ? { debugName: "visibleInput" } : /* istanbul ignore next */ {}), alias: 'visible' });
|
|
70
70
|
// Output signals
|
|
71
71
|
this.visibleChange = output();
|
|
72
72
|
// Internal state
|
|
73
|
-
this._visible = signal(false, ...(ngDevMode ? [{ debugName: "_visible" }] : []));
|
|
74
|
-
this.selectAllInThisTabsRef = viewChildren('selectAllInThisTabsRef', ...(ngDevMode ? [{ debugName: "selectAllInThisTabsRef" }] : []));
|
|
75
|
-
this.selectAllInAllTabsRef = viewChildren('selectAllInAllTabsRef', ...(ngDevMode ? [{ debugName: "selectAllInAllTabsRef" }] : []));
|
|
73
|
+
this._visible = signal(false, ...(ngDevMode ? [{ debugName: "_visible" }] : /* istanbul ignore next */ []));
|
|
74
|
+
this.selectAllInThisTabsRef = viewChildren('selectAllInThisTabsRef', ...(ngDevMode ? [{ debugName: "selectAllInThisTabsRef" }] : /* istanbul ignore next */ []));
|
|
75
|
+
this.selectAllInAllTabsRef = viewChildren('selectAllInAllTabsRef', ...(ngDevMode ? [{ debugName: "selectAllInAllTabsRef" }] : /* istanbul ignore next */ []));
|
|
76
76
|
this.data = { groups: [], entityDisplayName: '' };
|
|
77
77
|
this.permissions = [];
|
|
78
78
|
this.selectThisTab = false;
|
|
@@ -80,9 +80,9 @@ class PermissionManagementComponent {
|
|
|
80
80
|
this.disableSelectAllTab = false;
|
|
81
81
|
this.disabledSelectAllInAllTabs = false;
|
|
82
82
|
this.modalBusy = false;
|
|
83
|
-
this.filter = signal('', ...(ngDevMode ? [{ debugName: "filter" }] : []));
|
|
83
|
+
this.filter = signal('', ...(ngDevMode ? [{ debugName: "filter" }] : /* istanbul ignore next */ []));
|
|
84
84
|
this.selectedGroupPermissions = [];
|
|
85
|
-
this.permissionGroupSignal = signal([], ...(ngDevMode ? [{ debugName: "permissionGroupSignal" }] : []));
|
|
85
|
+
this.permissionGroupSignal = signal([], ...(ngDevMode ? [{ debugName: "permissionGroupSignal" }] : /* istanbul ignore next */ []));
|
|
86
86
|
this.permissionGroups = computed(() => {
|
|
87
87
|
const search = this.filter().toLowerCase().trim();
|
|
88
88
|
let groups = this.permissionGroupSignal();
|
|
@@ -99,7 +99,7 @@ class PermissionManagementComponent {
|
|
|
99
99
|
this.selectedGroupPermissions = [];
|
|
100
100
|
}
|
|
101
101
|
return groups;
|
|
102
|
-
}, ...(ngDevMode ? [{ debugName: "permissionGroups" }] : []));
|
|
102
|
+
}, ...(ngDevMode ? [{ debugName: "permissionGroups" }] : /* istanbul ignore next */ []));
|
|
103
103
|
this.trackByFn = (_, item) => item.name;
|
|
104
104
|
effect(() => {
|
|
105
105
|
const inputValue = this.visibleInput();
|
|
@@ -359,10 +359,10 @@ class PermissionManagementComponent {
|
|
|
359
359
|
return currentUser.id === providerKey;
|
|
360
360
|
return false;
|
|
361
361
|
}
|
|
362
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
363
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: PermissionManagementComponent, isStandalone: true, selector: "abp-permission-management", inputs: { providerNameInput: { classPropertyName: "providerNameInput", publicName: "providerName", isSignal: true, isRequired: false, transformFunction: null }, providerKeyInput: { classPropertyName: "providerKeyInput", publicName: "providerKey", isSignal: true, isRequired: false, transformFunction: null }, hideBadgesInput: { classPropertyName: "hideBadgesInput", publicName: "hideBadges", isSignal: true, isRequired: false, transformFunction: null }, entityDisplayName: { classPropertyName: "entityDisplayName", publicName: "entityDisplayName", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true, isSignal: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true, isSignal: 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\" ngTabs orientation=\"vertical\">\r\n <div class=\"col-md-4\">\r\n <div\r\n class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\"\r\n ngTabList\r\n orientation=\"vertical\"\r\n selectionMode=\"follow\"\r\n [selectedTab]=\"selectedGroup?.name\"\r\n (selectedTabChange)=\"onTabChange($event)\"\r\n >\r\n <div class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <button\r\n ngTab\r\n [value]=\"group.name\"\r\n class=\"nav-link pointer text-start w-100\"\r\n #tab=\"ngTab\"\r\n [class.active]=\"tab.selected()\"\r\n type=\"button\"\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 </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div ngTabPanel [value]=\"group.name\">\r\n <ng-template ngTabContent>\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 </ng-template>\r\n </div>\r\n }\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 .nav-pills{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container .nav-pills{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 .nav-item{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container .nav-item .nav-link.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: Tabs, selector: "[ngTabs]", exportAs: ["ngTabs"] }, { kind: "directive", type: TabList, selector: "[ngTabList]", inputs: ["orientation", "wrap", "softDisabled", "focusMode", "selectionMode", "selectedTab", "disabled"], outputs: ["selectedTabChange"], exportAs: ["ngTabList"] }, { kind: "directive", type: Tab, selector: "[ngTab]", inputs: ["id", "disabled", "value"], exportAs: ["ngTab"] }, { kind: "directive", type: TabPanel, selector: "[ngTabPanel]", inputs: ["id", "value"], exportAs: ["ngTabPanel"] }, { kind: "directive", type: TabContent, selector: "ng-template[ngTabContent]", exportAs: ["ngTabContent"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
362
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
363
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PermissionManagementComponent, isStandalone: true, selector: "abp-permission-management", inputs: { providerNameInput: { classPropertyName: "providerNameInput", publicName: "providerName", isSignal: true, isRequired: false, transformFunction: null }, providerKeyInput: { classPropertyName: "providerKeyInput", publicName: "providerKey", isSignal: true, isRequired: false, transformFunction: null }, hideBadgesInput: { classPropertyName: "hideBadgesInput", publicName: "hideBadges", isSignal: true, isRequired: false, transformFunction: null }, entityDisplayName: { classPropertyName: "entityDisplayName", publicName: "entityDisplayName", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true, isSignal: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true, isSignal: 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\" ngTabs orientation=\"vertical\">\r\n <div class=\"col-md-4\">\r\n <div\r\n class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\"\r\n ngTabList\r\n orientation=\"vertical\"\r\n selectionMode=\"follow\"\r\n [selectedTab]=\"selectedGroup?.name\"\r\n (selectedTabChange)=\"onTabChange($event)\"\r\n >\r\n <div class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <button\r\n ngTab\r\n [value]=\"group.name\"\r\n class=\"nav-link pointer text-start w-100\"\r\n #tab=\"ngTab\"\r\n [class.active]=\"tab.selected()\"\r\n type=\"button\"\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 </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div ngTabPanel [value]=\"group.name\">\r\n <ng-template ngTabContent>\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 </ng-template>\r\n </div>\r\n }\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 .nav-pills{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container .nav-pills{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 .nav-item{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container .nav-item .nav-link.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: Tabs, selector: "[ngTabs]", exportAs: ["ngTabs"] }, { kind: "directive", type: TabList, selector: "[ngTabList]", inputs: ["orientation", "wrap", "softDisabled", "focusMode", "selectionMode", "selectedTab", "disabled"], outputs: ["selectedTabChange"], exportAs: ["ngTabList"] }, { kind: "directive", type: Tab, selector: "[ngTab]", inputs: ["id", "disabled", "value"], exportAs: ["ngTab"] }, { kind: "directive", type: TabPanel, selector: "[ngTabPanel]", inputs: ["id", "value"], exportAs: ["ngTabPanel"] }, { kind: "directive", type: TabContent, selector: "ng-template[ngTabContent]", exportAs: ["ngTabContent"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
364
364
|
}
|
|
365
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionManagementComponent, decorators: [{
|
|
366
366
|
type: Component,
|
|
367
367
|
args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', imports: [
|
|
368
368
|
FormsModule,
|
|
@@ -417,48 +417,48 @@ var eResourcePermissionViewModes;
|
|
|
417
417
|
class ResourcePermissionStateService {
|
|
418
418
|
constructor() {
|
|
419
419
|
// View state
|
|
420
|
-
this.viewMode = signal(eResourcePermissionViewModes.List, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
421
|
-
this.modalBusy = signal(false, ...(ngDevMode ? [{ debugName: "modalBusy" }] : []));
|
|
422
|
-
this.hasResourcePermission = signal(false, ...(ngDevMode ? [{ debugName: "hasResourcePermission" }] : []));
|
|
423
|
-
this.hasProviderKeyLookupService = signal(false, ...(ngDevMode ? [{ debugName: "hasProviderKeyLookupService" }] : []));
|
|
420
|
+
this.viewMode = signal(eResourcePermissionViewModes.List, ...(ngDevMode ? [{ debugName: "viewMode" }] : /* istanbul ignore next */ []));
|
|
421
|
+
this.modalBusy = signal(false, ...(ngDevMode ? [{ debugName: "modalBusy" }] : /* istanbul ignore next */ []));
|
|
422
|
+
this.hasResourcePermission = signal(false, ...(ngDevMode ? [{ debugName: "hasResourcePermission" }] : /* istanbul ignore next */ []));
|
|
423
|
+
this.hasProviderKeyLookupService = signal(false, ...(ngDevMode ? [{ debugName: "hasProviderKeyLookupService" }] : /* istanbul ignore next */ []));
|
|
424
424
|
// Resource data
|
|
425
|
-
this.resourceName = signal('', ...(ngDevMode ? [{ debugName: "resourceName" }] : []));
|
|
426
|
-
this.resourceKey = signal('', ...(ngDevMode ? [{ debugName: "resourceKey" }] : []));
|
|
427
|
-
this.resourceDisplayName = signal(undefined, ...(ngDevMode ? [{ debugName: "resourceDisplayName" }] : []));
|
|
425
|
+
this.resourceName = signal('', ...(ngDevMode ? [{ debugName: "resourceName" }] : /* istanbul ignore next */ []));
|
|
426
|
+
this.resourceKey = signal('', ...(ngDevMode ? [{ debugName: "resourceKey" }] : /* istanbul ignore next */ []));
|
|
427
|
+
this.resourceDisplayName = signal(undefined, ...(ngDevMode ? [{ debugName: "resourceDisplayName" }] : /* istanbul ignore next */ []));
|
|
428
428
|
// Permissions data
|
|
429
|
-
this.allResourcePermissions = signal([], ...(ngDevMode ? [{ debugName: "allResourcePermissions" }] : []));
|
|
430
|
-
this.resourcePermissions = signal([], ...(ngDevMode ? [{ debugName: "resourcePermissions" }] : []));
|
|
431
|
-
this.totalCount = signal(0, ...(ngDevMode ? [{ debugName: "totalCount" }] : []));
|
|
432
|
-
this.permissionDefinitions = signal([], ...(ngDevMode ? [{ debugName: "permissionDefinitions" }] : []));
|
|
433
|
-
this.permissionsWithProvider = signal([], ...(ngDevMode ? [{ debugName: "permissionsWithProvider" }] : []));
|
|
434
|
-
this.selectedPermissions = signal([], ...(ngDevMode ? [{ debugName: "selectedPermissions" }] : []));
|
|
429
|
+
this.allResourcePermissions = signal([], ...(ngDevMode ? [{ debugName: "allResourcePermissions" }] : /* istanbul ignore next */ []));
|
|
430
|
+
this.resourcePermissions = signal([], ...(ngDevMode ? [{ debugName: "resourcePermissions" }] : /* istanbul ignore next */ []));
|
|
431
|
+
this.totalCount = signal(0, ...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
|
|
432
|
+
this.permissionDefinitions = signal([], ...(ngDevMode ? [{ debugName: "permissionDefinitions" }] : /* istanbul ignore next */ []));
|
|
433
|
+
this.permissionsWithProvider = signal([], ...(ngDevMode ? [{ debugName: "permissionsWithProvider" }] : /* istanbul ignore next */ []));
|
|
434
|
+
this.selectedPermissions = signal([], ...(ngDevMode ? [{ debugName: "selectedPermissions" }] : /* istanbul ignore next */ []));
|
|
435
435
|
// Provider data
|
|
436
|
-
this.providers = signal([], ...(ngDevMode ? [{ debugName: "providers" }] : []));
|
|
437
|
-
this.selectedProviderName = signal('', ...(ngDevMode ? [{ debugName: "selectedProviderName" }] : []));
|
|
438
|
-
this.selectedProviderKey = signal('', ...(ngDevMode ? [{ debugName: "selectedProviderKey" }] : []));
|
|
436
|
+
this.providers = signal([], ...(ngDevMode ? [{ debugName: "providers" }] : /* istanbul ignore next */ []));
|
|
437
|
+
this.selectedProviderName = signal('', ...(ngDevMode ? [{ debugName: "selectedProviderName" }] : /* istanbul ignore next */ []));
|
|
438
|
+
this.selectedProviderKey = signal('', ...(ngDevMode ? [{ debugName: "selectedProviderKey" }] : /* istanbul ignore next */ []));
|
|
439
439
|
// Edit mode specific
|
|
440
|
-
this.editProviderName = signal('', ...(ngDevMode ? [{ debugName: "editProviderName" }] : []));
|
|
441
|
-
this.editProviderKey = signal('', ...(ngDevMode ? [{ debugName: "editProviderKey" }] : []));
|
|
440
|
+
this.editProviderName = signal('', ...(ngDevMode ? [{ debugName: "editProviderName" }] : /* istanbul ignore next */ []));
|
|
441
|
+
this.editProviderKey = signal('', ...(ngDevMode ? [{ debugName: "editProviderKey" }] : /* istanbul ignore next */ []));
|
|
442
442
|
// Search state
|
|
443
|
-
this.searchFilter = signal('', ...(ngDevMode ? [{ debugName: "searchFilter" }] : []));
|
|
444
|
-
this.searchResults = signal([], ...(ngDevMode ? [{ debugName: "searchResults" }] : []));
|
|
445
|
-
this.showDropdown = signal(false, ...(ngDevMode ? [{ debugName: "showDropdown" }] : []));
|
|
443
|
+
this.searchFilter = signal('', ...(ngDevMode ? [{ debugName: "searchFilter" }] : /* istanbul ignore next */ []));
|
|
444
|
+
this.searchResults = signal([], ...(ngDevMode ? [{ debugName: "searchResults" }] : /* istanbul ignore next */ []));
|
|
445
|
+
this.showDropdown = signal(false, ...(ngDevMode ? [{ debugName: "showDropdown" }] : /* istanbul ignore next */ []));
|
|
446
446
|
// Computed properties
|
|
447
|
-
this.isAddMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Add, ...(ngDevMode ? [{ debugName: "isAddMode" }] : []));
|
|
448
|
-
this.isEditMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Edit, ...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
|
|
449
|
-
this.isListMode = computed(() => this.viewMode() === eResourcePermissionViewModes.List, ...(ngDevMode ? [{ debugName: "isListMode" }] : []));
|
|
450
|
-
this.currentPermissionsList = computed(() => this.isAddMode() ? this.permissionDefinitions() : this.permissionsWithProvider(), ...(ngDevMode ? [{ debugName: "currentPermissionsList" }] : []));
|
|
447
|
+
this.isAddMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Add, ...(ngDevMode ? [{ debugName: "isAddMode" }] : /* istanbul ignore next */ []));
|
|
448
|
+
this.isEditMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Edit, ...(ngDevMode ? [{ debugName: "isEditMode" }] : /* istanbul ignore next */ []));
|
|
449
|
+
this.isListMode = computed(() => this.viewMode() === eResourcePermissionViewModes.List, ...(ngDevMode ? [{ debugName: "isListMode" }] : /* istanbul ignore next */ []));
|
|
450
|
+
this.currentPermissionsList = computed(() => this.isAddMode() ? this.permissionDefinitions() : this.permissionsWithProvider(), ...(ngDevMode ? [{ debugName: "currentPermissionsList" }] : /* istanbul ignore next */ []));
|
|
451
451
|
this.allPermissionsSelected = computed(() => {
|
|
452
452
|
const definitions = this.currentPermissionsList();
|
|
453
453
|
return definitions.length > 0 &&
|
|
454
454
|
definitions.every(p => this.selectedPermissions().includes(p.name || ''));
|
|
455
|
-
}, ...(ngDevMode ? [{ debugName: "allPermissionsSelected" }] : []));
|
|
455
|
+
}, ...(ngDevMode ? [{ debugName: "allPermissionsSelected" }] : /* istanbul ignore next */ []));
|
|
456
456
|
this.canSave = computed(() => {
|
|
457
457
|
if (this.isAddMode()) {
|
|
458
458
|
return !!this.selectedProviderKey() && this.selectedPermissions().length > 0;
|
|
459
459
|
}
|
|
460
460
|
return this.selectedPermissions().length >= 0;
|
|
461
|
-
}, ...(ngDevMode ? [{ debugName: "canSave" }] : []));
|
|
461
|
+
}, ...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
|
|
462
462
|
}
|
|
463
463
|
// State transition methods
|
|
464
464
|
goToListMode() {
|
|
@@ -541,10 +541,10 @@ class ResourcePermissionStateService {
|
|
|
541
541
|
this.permissionDefinitions.set(permissions);
|
|
542
542
|
this.hasResourcePermission.set(permissions.length > 0);
|
|
543
543
|
}
|
|
544
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
545
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
544
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
545
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionStateService }); }
|
|
546
546
|
}
|
|
547
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
547
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionStateService, decorators: [{
|
|
548
548
|
type: Injectable
|
|
549
549
|
}] });
|
|
550
550
|
|
|
@@ -598,8 +598,8 @@ class ResourcePermissionListComponent {
|
|
|
598
598
|
this.deleteClicked = output();
|
|
599
599
|
configureResourcePermissionExtensions();
|
|
600
600
|
}
|
|
601
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
602
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
601
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
602
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ResourcePermissionListComponent, isStandalone: true, selector: "abp-resource-permission-list", outputs: { addClicked: "addClicked", editClicked: "editClicked", deleteClicked: "deleteClicked" }, providers: [
|
|
603
603
|
ListService,
|
|
604
604
|
{
|
|
605
605
|
provide: EXTENSIONS_IDENTIFIER,
|
|
@@ -607,7 +607,7 @@ class ResourcePermissionListComponent {
|
|
|
607
607
|
},
|
|
608
608
|
], ngImport: i0, template: "<div class=\"d-grid gap-2 mb-3 d-md-flex justify-content-md-end\">\r\n <button class=\"btn btn-sm btn-primary\" type=\"button\" (click)=\"addClicked.emit()\">\r\n <i class=\"fa fa-plus me-1\"></i>\r\n {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n </button>\r\n</div>\r\n\r\n<ng-template #actionsTemplate let-row>\r\n <div class=\"btn-group btn-group-sm\" role=\"group\">\r\n <button\r\n class=\"btn btn-outline-primary\"\r\n type=\"button\"\r\n (click)=\"editClicked.emit(row)\"\r\n [title]=\"'AbpUi::Edit' | abpLocalization\"\r\n >\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button\r\n class=\"btn btn-outline-danger\"\r\n type=\"button\"\r\n (click)=\"deleteClicked.emit(row)\"\r\n [title]=\"'AbpUi::Delete' | abpLocalization\"\r\n >\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n@if (state.resourcePermissions().length > 0) {\r\n <abp-extensible-table\r\n [data]=\"state.resourcePermissions()\"\r\n [recordsTotal]=\"state.totalCount()\"\r\n [list]=\"list\"\r\n [actionsTemplate]=\"actionsTemplate\"\r\n actionsText=\"AbpUi::Actions\"\r\n />\r\n} @else {\r\n <div class=\"alert alert-info\">\r\n {{ 'AbpPermissionManagement::NoPermissionsAssigned' | abpLocalization }}\r\n </div>\r\n}\r\n", dependencies: [{ kind: "component", type: ExtensibleTableComponent, selector: "abp-extensible-table", inputs: ["actionsText", "data", "list", "recordsTotal", "actionsColumnWidth", "actionsTemplate", "selectable", "selectionType", "selected", "infiniteScroll", "isLoading", "scrollThreshold", "tableHeight", "rowDetailTemplate", "rowDetailHeight"], outputs: ["tableActivate", "selectionChange", "loadMore", "rowDetailToggle"], exportAs: ["abpExtensibleTable"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
609
609
|
}
|
|
610
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionListComponent, decorators: [{
|
|
611
611
|
type: Component,
|
|
612
612
|
args: [{ selector: 'abp-resource-permission-list', providers: [
|
|
613
613
|
ListService,
|
|
@@ -623,7 +623,7 @@ class ProviderKeySearchComponent {
|
|
|
623
623
|
this.state = inject(ResourcePermissionStateService);
|
|
624
624
|
this.service = inject(PermissionsService);
|
|
625
625
|
this.destroyRef = inject(DestroyRef);
|
|
626
|
-
this.resourceName = input.required(...(ngDevMode ? [{ debugName: "resourceName" }] : []));
|
|
626
|
+
this.resourceName = input.required(...(ngDevMode ? [{ debugName: "resourceName" }] : /* istanbul ignore next */ []));
|
|
627
627
|
this.searchFn = () => new Observable();
|
|
628
628
|
}
|
|
629
629
|
ngOnInit() {
|
|
@@ -650,10 +650,10 @@ class ProviderKeySearchComponent {
|
|
|
650
650
|
providerDisplayName: k.providerDisplayName || undefined,
|
|
651
651
|
}))), takeUntilDestroyed(this.destroyRef));
|
|
652
652
|
}
|
|
653
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
654
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.
|
|
653
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ProviderKeySearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
654
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.8", type: ProviderKeySearchComponent, isStandalone: true, selector: "abp-provider-key-search", inputs: { resourceName: { classPropertyName: "resourceName", publicName: "resourceName", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<abp-lookup-search\r\n label=\"AbpPermissionManagement::SearchProviderKey\"\r\n placeholder=\"AbpPermissionManagement::SearchProviderKey\"\r\n [searchFn]=\"searchFn\"\r\n [displayValue]=\"state.searchFilter()\"\r\n (displayValueChange)=\"state.searchFilter.set($event)\"\r\n [selectedValue]=\"state.selectedProviderKey()\"\r\n (selectedValueChange)=\"state.selectedProviderKey.set($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n/>\r\n", dependencies: [{ kind: "component", type: LookupSearchComponent, selector: "abp-lookup-search", inputs: ["label", "placeholder", "debounceTime", "minSearchLength", "displayKey", "valueKey", "disabled", "searchFn", "selectedValue", "displayValue"], outputs: ["selectedValueChange", "displayValueChange", "itemSelected", "searchChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
655
655
|
}
|
|
656
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
656
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ProviderKeySearchComponent, decorators: [{
|
|
657
657
|
type: Component,
|
|
658
658
|
args: [{ selector: 'abp-provider-key-search', imports: [LookupSearchComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<abp-lookup-search\r\n label=\"AbpPermissionManagement::SearchProviderKey\"\r\n placeholder=\"AbpPermissionManagement::SearchProviderKey\"\r\n [searchFn]=\"searchFn\"\r\n [displayValue]=\"state.searchFilter()\"\r\n (displayValueChange)=\"state.searchFilter.set($event)\"\r\n [selectedValue]=\"state.selectedProviderKey()\"\r\n (selectedValueChange)=\"state.selectedProviderKey.set($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n/>\r\n" }]
|
|
659
659
|
}], propDecorators: { resourceName: [{ type: i0.Input, args: [{ isSignal: true, alias: "resourceName", required: true }] }] } });
|
|
@@ -661,15 +661,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
661
661
|
class PermissionCheckboxListComponent {
|
|
662
662
|
constructor() {
|
|
663
663
|
this.state = inject(ResourcePermissionStateService);
|
|
664
|
-
this.permissions = input.required(...(ngDevMode ? [{ debugName: "permissions" }] : []));
|
|
665
|
-
this.idPrefix = input('default', ...(ngDevMode ? [{ debugName: "idPrefix" }] : []));
|
|
666
|
-
this.title = input('AbpPermissionManagement::ResourcePermissionPermissions', ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
667
|
-
this.showTitle = input(true, ...(ngDevMode ? [{ debugName: "showTitle" }] : []));
|
|
664
|
+
this.permissions = input.required(...(ngDevMode ? [{ debugName: "permissions" }] : /* istanbul ignore next */ []));
|
|
665
|
+
this.idPrefix = input('default', ...(ngDevMode ? [{ debugName: "idPrefix" }] : /* istanbul ignore next */ []));
|
|
666
|
+
this.title = input('AbpPermissionManagement::ResourcePermissionPermissions', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
667
|
+
this.showTitle = input(true, ...(ngDevMode ? [{ debugName: "showTitle" }] : /* istanbul ignore next */ []));
|
|
668
668
|
}
|
|
669
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
670
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
669
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionCheckboxListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
670
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: PermissionCheckboxListComponent, isStandalone: true, selector: "abp-permission-checkbox-list", inputs: { permissions: { classPropertyName: "permissions", publicName: "permissions", isSignal: true, isRequired: true, transformFunction: null }, idPrefix: { classPropertyName: "idPrefix", publicName: "idPrefix", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, showTitle: { classPropertyName: "showTitle", publicName: "showTitle", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"mb-3\">\r\n @if (showTitle()) {\r\n <h5>{{ title() | abpLocalization }}</h5>\r\n }\r\n <div class=\"form-check form-switch mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"grantAll-{{ idPrefix() }}\"\r\n [checked]=\"state.allPermissionsSelected()\"\r\n (change)=\"state.toggleAllPermissions(!state.allPermissionsSelected())\"\r\n />\r\n <label class=\"form-check-label\" for=\"grantAll-{{ idPrefix() }}\">\r\n {{ 'AbpPermissionManagement::GrantAllResourcePermissions' | abpLocalization }}\r\n </label>\r\n </div>\r\n <div class=\"abp-permission-list-container border rounded p-3\">\r\n @for (perm of permissions(); track perm.name) {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"perm-{{ idPrefix() }}-{{ perm.name }}\"\r\n [checked]=\"state.isPermissionSelected(perm.name || '')\"\r\n (change)=\"state.togglePermission(perm.name || '')\"\r\n />\r\n <label class=\"form-check-label\" for=\"perm-{{ idPrefix() }}-{{ perm.name }}\">\r\n {{ perm.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".abp-permission-list-container{max-height:300px;overflow-y:auto}\n"], dependencies: [{ kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
671
671
|
}
|
|
672
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
672
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionCheckboxListComponent, decorators: [{
|
|
673
673
|
type: Component,
|
|
674
674
|
args: [{ selector: 'abp-permission-checkbox-list', imports: [LocalizationPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-3\">\r\n @if (showTitle()) {\r\n <h5>{{ title() | abpLocalization }}</h5>\r\n }\r\n <div class=\"form-check form-switch mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"grantAll-{{ idPrefix() }}\"\r\n [checked]=\"state.allPermissionsSelected()\"\r\n (change)=\"state.toggleAllPermissions(!state.allPermissionsSelected())\"\r\n />\r\n <label class=\"form-check-label\" for=\"grantAll-{{ idPrefix() }}\">\r\n {{ 'AbpPermissionManagement::GrantAllResourcePermissions' | abpLocalization }}\r\n </label>\r\n </div>\r\n <div class=\"abp-permission-list-container border rounded p-3\">\r\n @for (perm of permissions(); track perm.name) {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"perm-{{ idPrefix() }}-{{ perm.name }}\"\r\n [checked]=\"state.isPermissionSelected(perm.name || '')\"\r\n (change)=\"state.togglePermission(perm.name || '')\"\r\n />\r\n <label class=\"form-check-label\" for=\"perm-{{ idPrefix() }}-{{ perm.name }}\">\r\n {{ perm.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".abp-permission-list-container{max-height:300px;overflow-y:auto}\n"] }]
|
|
675
675
|
}], propDecorators: { permissions: [{ type: i0.Input, args: [{ isSignal: true, alias: "permissions", required: true }] }], idPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "idPrefix", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], showTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTitle", required: false }] }] } });
|
|
@@ -678,15 +678,15 @@ class ResourcePermissionFormComponent {
|
|
|
678
678
|
constructor() {
|
|
679
679
|
this.state = inject(ResourcePermissionStateService);
|
|
680
680
|
this.eResourcePermissionViewModes = eResourcePermissionViewModes;
|
|
681
|
-
this.mode = input.required(...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
682
|
-
this.resourceName = input.required(...(ngDevMode ? [{ debugName: "resourceName" }] : []));
|
|
681
|
+
this.mode = input.required(...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
682
|
+
this.resourceName = input.required(...(ngDevMode ? [{ debugName: "resourceName" }] : /* istanbul ignore next */ []));
|
|
683
683
|
this.save = output();
|
|
684
684
|
this.cancel = output();
|
|
685
685
|
}
|
|
686
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
687
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
686
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
687
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ResourcePermissionFormComponent, isStandalone: true, selector: "abp-resource-permission-form", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, resourceName: { classPropertyName: "resourceName", publicName: "resourceName", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { save: "save", cancel: "cancel" }, ngImport: i0, template: "@if (mode() === eResourcePermissionViewModes.Add) {\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-bold\">\r\n {{ 'AbpPermissionManagement::SelectProvider' | abpLocalization }}\r\n </label>\r\n <div class=\"mb-2\">\r\n @for (provider of state.providers(); track provider.name; let i = $index) {\r\n <div class=\"form-check form-check-inline\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [id]=\"'provider-' + i\"\r\n [value]=\"provider.name\"\r\n [checked]=\"state.selectedProviderName() === provider.name\"\r\n (change)=\"state.onProviderChange(provider.name || '')\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'provider-' + i\">\r\n {{ provider.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n <abp-provider-key-search [resourceName]=\"resourceName()\" />\r\n </div>\r\n\r\n <abp-permission-checkbox-list [permissions]=\"state.permissionDefinitions()\" idPrefix=\"add\" />\r\n} @else {\r\n <div class=\"mb-3\" id=\"permissionList\">\r\n <abp-permission-checkbox-list\r\n [permissions]=\"state.permissionsWithProvider()\"\r\n idPrefix=\"edit\"\r\n [showTitle]=\"false\"\r\n />\r\n </div>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: ProviderKeySearchComponent, selector: "abp-provider-key-search", inputs: ["resourceName"] }, { kind: "component", type: PermissionCheckboxListComponent, selector: "abp-permission-checkbox-list", inputs: ["permissions", "idPrefix", "title", "showTitle"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
688
688
|
}
|
|
689
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
689
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionFormComponent, decorators: [{
|
|
690
690
|
type: Component,
|
|
691
691
|
args: [{ selector: 'abp-resource-permission-form', imports: [
|
|
692
692
|
FormsModule,
|
|
@@ -705,11 +705,11 @@ class ResourcePermissionManagementComponent {
|
|
|
705
705
|
this.confirmationService = inject(ConfirmationService);
|
|
706
706
|
this.state = inject(ResourcePermissionStateService);
|
|
707
707
|
this.list = inject(ListService);
|
|
708
|
-
this.resourceName = input.required(...(ngDevMode ? [{ debugName: "resourceName" }] : []));
|
|
709
|
-
this.resourceKey = input.required(...(ngDevMode ? [{ debugName: "resourceKey" }] : []));
|
|
710
|
-
this.resourceDisplayName = input(...(ngDevMode ? [undefined, { debugName: "resourceDisplayName" }] : []));
|
|
711
|
-
this.visible = model(false, ...(ngDevMode ? [{ debugName: "visible" }] : []));
|
|
712
|
-
this.previousVisible = signal(false, ...(ngDevMode ? [{ debugName: "previousVisible" }] : []));
|
|
708
|
+
this.resourceName = input.required(...(ngDevMode ? [{ debugName: "resourceName" }] : /* istanbul ignore next */ []));
|
|
709
|
+
this.resourceKey = input.required(...(ngDevMode ? [{ debugName: "resourceKey" }] : /* istanbul ignore next */ []));
|
|
710
|
+
this.resourceDisplayName = input(...(ngDevMode ? [undefined, { debugName: "resourceDisplayName" }] : /* istanbul ignore next */ []));
|
|
711
|
+
this.visible = model(false, ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
|
|
712
|
+
this.previousVisible = signal(false, ...(ngDevMode ? [{ debugName: "previousVisible" }] : /* istanbul ignore next */ []));
|
|
713
713
|
effect(() => {
|
|
714
714
|
const resourceName = this.resourceName();
|
|
715
715
|
const resourceKey = this.resourceKey();
|
|
@@ -832,10 +832,10 @@ class ResourcePermissionManagementComponent {
|
|
|
832
832
|
},
|
|
833
833
|
});
|
|
834
834
|
}
|
|
835
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
836
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
835
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
836
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ResourcePermissionManagementComponent, isStandalone: true, selector: "abp-resource-permission-management", inputs: { resourceName: { classPropertyName: "resourceName", publicName: "resourceName", isSignal: true, isRequired: true, transformFunction: null }, resourceKey: { classPropertyName: "resourceKey", publicName: "resourceKey", isSignal: true, isRequired: true, transformFunction: null }, resourceDisplayName: { classPropertyName: "resourceDisplayName", publicName: "resourceDisplayName", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange" }, providers: [ResourcePermissionStateService, ListService], exportAs: ["abpResourcePermissionManagement"], ngImport: i0, template: "<abp-modal\r\n [(visible)]=\"visible\"\r\n [busy]=\"state.modalBusy()\"\r\n [options]=\"{ size: 'xl', scrollable: false }\"\r\n>\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">\r\n @switch (state.viewMode()) {\r\n @case (eResourcePermissionViewModes.Edit) {\r\n {{ 'AbpPermissionManagement::UpdatePermission' | abpLocalization }}\r\n }\r\n @case (eResourcePermissionViewModes.Add) {\r\n {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n }\r\n @default {\r\n {{ 'AbpPermissionManagement::ResourcePermissions' | abpLocalization }}\r\n @if (resourceDisplayName()) {\r\n - {{ resourceDisplayName() }}\r\n }\r\n }\r\n }\r\n </h5>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (!state.hasResourcePermission() || !state.hasProviderKeyLookupService()) {\r\n <div class=\"alert alert-warning\" role=\"alert\">\r\n @if (!state.hasResourcePermission()) {\r\n {{ 'AbpPermissionManagement::NoResourcePermissionFound' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpPermissionManagement::NoResourceProviderKeyLookupServiceFound' | abpLocalization }}\r\n }\r\n </div>\r\n } @else {\r\n @switch (state.viewMode()) {\r\n @case (eResourcePermissionViewModes.List) {\r\n <abp-resource-permission-list\r\n (addClicked)=\"onAddClicked()\"\r\n (editClicked)=\"onEditClicked($event)\"\r\n (deleteClicked)=\"onDeleteClicked($event)\"\r\n />\r\n }\r\n @case (eResourcePermissionViewModes.Add) {\r\n <abp-resource-permission-form mode=\"add\" [resourceName]=\"resourceName()\" />\r\n }\r\n @case (eResourcePermissionViewModes.Edit) {\r\n <abp-resource-permission-form mode=\"edit\" [resourceName]=\"resourceName()\" />\r\n }\r\n }\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n @if (state.isListMode()) {\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Close' | abpLocalization }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"state.goToListMode()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"savePermission()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n }\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: ResourcePermissionListComponent, selector: "abp-resource-permission-list", outputs: ["addClicked", "editClicked", "deleteClicked"] }, { kind: "component", type: ResourcePermissionFormComponent, selector: "abp-resource-permission-form", inputs: ["mode", "resourceName"], outputs: ["save", "cancel"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }] }); }
|
|
837
837
|
}
|
|
838
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
838
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ResourcePermissionManagementComponent, decorators: [{
|
|
839
839
|
type: Component,
|
|
840
840
|
args: [{ selector: 'abp-resource-permission-management', exportAs: 'abpResourcePermissionManagement', providers: [ResourcePermissionStateService, ListService], imports: [
|
|
841
841
|
ModalComponent,
|
|
@@ -848,11 +848,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
848
848
|
}], ctorParameters: () => [], propDecorators: { resourceName: [{ type: i0.Input, args: [{ isSignal: true, alias: "resourceName", required: true }] }], resourceKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "resourceKey", required: true }] }], resourceDisplayName: [{ type: i0.Input, args: [{ isSignal: true, alias: "resourceDisplayName", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }, { type: i0.Output, args: ["visibleChange"] }] } });
|
|
849
849
|
|
|
850
850
|
class PermissionManagementModule {
|
|
851
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
852
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.
|
|
853
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.
|
|
851
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
852
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.8", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent], exports: [PermissionManagementComponent] }); }
|
|
853
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent] }); }
|
|
854
854
|
}
|
|
855
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
855
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PermissionManagementModule, decorators: [{
|
|
856
856
|
type: NgModule,
|
|
857
857
|
args: [{
|
|
858
858
|
declarations: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/enums/view-modes.ts","../../../../packages/permission-management/src/lib/services/resource-permission-state.service.ts","../../../../packages/permission-management/src/lib/defaults/default-resource-permission-entity-props.ts","../../../../packages/permission-management/src/lib/tokens/extensions.token.ts","../../../../packages/permission-management/src/lib/services/extensions.service.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport { ConfigStateService, CurrentUserDto, LocalizationPipe } from '@abp/ng.core';\r\nimport {\r\n ButtonComponent,\r\n LocaleDirection,\r\n ModalCloseDirective,\r\n ModalComponent,\r\n ToasterService,\r\n} from '@abp/ng.theme.shared';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport {\r\n afterNextRender,\r\n Component,\r\n computed,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n output,\r\n signal,\r\n TrackByFunction,\r\n untracked,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { Tabs, TabList, Tab, TabPanel, TabContent } from '@angular/aria/tabs';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .scroll-in-modal {\r\n overflow: auto;\r\n /*\r\n To maintain a 28px top margin and 28px bottom margin when the modal reaches full height, the scrollable area needs to be 100vh - 23.1rem\r\n */\r\n max-height: calc(100vh - 23.1rem);\r\n }\r\n\r\n .lpx-scroll-pills-container .nav-pills {\r\n display: block;\r\n overflow-y: auto;\r\n }\r\n\r\n /* Target mobile screens */\r\n @media (max-width: 768px) {\r\n .scroll-in-modal {\r\n max-height: calc(100vh - 15rem);\r\n }\r\n .lpx-scroll-pills-container .nav-pills {\r\n max-height: 500px;\r\n }\r\n }\r\n\r\n fieldset legend {\r\n float: none;\r\n width: auto;\r\n }\r\n\r\n .lpx-scroll-pills-container .tab-content {\r\n padding-top: 0 !important;\r\n padding-bottom: 0 !important;\r\n }\r\n\r\n .lpx-scroll-pills-container .nav-item {\r\n margin-bottom: 10px;\r\n border-radius: 10px;\r\n }\r\n\r\n .lpx-scroll-pills-container .nav-item .nav-link.active {\r\n color: #fff !important;\r\n border-color: #6c5dd3 !important;\r\n background-color: #6c5dd3 !important;\r\n }\r\n `,\r\n ],\r\n imports: [\r\n FormsModule,\r\n NgStyle,\r\n ModalComponent,\r\n LocalizationPipe,\r\n ButtonComponent,\r\n ModalCloseDirective,\r\n Tabs,\r\n TabList,\r\n Tab,\r\n TabPanel,\r\n TabContent,\r\n ],\r\n})\r\nexport class PermissionManagementComponent {\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly configState = inject(ConfigStateService);\r\n protected readonly toasterService = inject(ToasterService);\r\n private readonly injector = inject(Injector);\r\n private document = inject(DOCUMENT);\r\n\r\n\r\n readonly providerNameInput = input('', { alias: 'providerName' });\r\n readonly providerKeyInput = input('', { alias: 'providerKey' });\r\n readonly hideBadgesInput = input(false, { alias: 'hideBadges' });\r\n readonly entityDisplayName = input<string | undefined>(undefined);\r\n readonly visibleInput = input(false, { alias: 'visible' });\r\n\r\n // Output signals\r\n readonly visibleChange = output<boolean>();\r\n\r\n // Internal state\r\n protected readonly _visible = signal(false);\r\n\r\n // Backward-compatible getters/setters for ReplaceableTemplateDirective.\r\n private _providerNameOverride?: string;\r\n get providerName(): string {\r\n return this._providerNameOverride ?? this.providerNameInput();\r\n }\r\n set providerName(value: string) {\r\n this._providerNameOverride = value;\r\n }\r\n\r\n private _providerKeyOverride?: string;\r\n get providerKey(): string {\r\n return this._providerKeyOverride ?? this.providerKeyInput();\r\n }\r\n set providerKey(value: string) {\r\n this._providerKeyOverride = value;\r\n }\r\n\r\n private _hideBadgesOverride?: boolean;\r\n get hideBadges(): boolean {\r\n return this._hideBadgesOverride ?? this.hideBadgesInput();\r\n }\r\n set hideBadges(value: boolean) {\r\n this._hideBadgesOverride = value;\r\n }\r\n\r\n selectAllInThisTabsRef = viewChildren<ElementRef<HTMLInputElement>>('selectAllInThisTabsRef');\r\n selectAllInAllTabsRef = viewChildren<ElementRef<HTMLInputElement>>('selectAllInAllTabsRef');\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n filter = signal<string>('');\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n permissionGroups = computed(() => {\r\n const search = this.filter().toLowerCase().trim();\r\n let groups = this.permissionGroupSignal();\r\n\r\n if (!search) {\r\n this.setSelectedGroup(groups[0]);\r\n return groups;\r\n }\r\n\r\n const includesSearch = text => text.toLowerCase().includes(search);\r\n groups = groups.filter(group =>\r\n group.permissions.some(\r\n permission => includesSearch(permission.displayName) || includesSearch(group.displayName),\r\n ),\r\n );\r\n\r\n if (groups.length) {\r\n this.setSelectedGroup(groups[0]);\r\n } else {\r\n this.selectedGroupPermissions = [];\r\n }\r\n\r\n return groups;\r\n });\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n // Getter/setter for visible - used by ReplaceableTemplateDirective and internal code\r\n get visible(): boolean {\r\n return this._visible();\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible()) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible.set(true);\r\n this.visibleChange.emit(true);\r\n afterNextRender(() => {\r\n this.initModal();\r\n }, { injector: this.injector });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible.set(false);\r\n this.visibleChange.emit(false);\r\n this.filter.set('');\r\n }\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const inputValue = this.visibleInput();\r\n untracked(() => {\r\n if (this._visible() !== inputValue) {\r\n if (inputValue) {\r\n this.openModal().subscribe(() => {\r\n this._visible.set(true);\r\n afterNextRender(() => {\r\n this.initModal();\r\n }, { injector: this.injector });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible.set(false);\r\n this.filter.set('');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${\r\n (this.document.body?.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n }) as unknown as PermissionWithStyle,\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n const { isGranted, grantedProviders } = clickedPermission;\r\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\r\n return;\r\n }\r\n\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissions = this.permissions.map(permission => {\r\n const isExactMatch = clickedPermission.name == permission.name;\r\n const isParentOfPermission = clickedPermission.parentName === permission.name;\r\n const isChildOfPermission = clickedPermission.name === permission.parentName;\r\n\r\n if (isExactMatch) {\r\n return { ...permission, isGranted: !permission.isGranted };\r\n }\r\n\r\n if (isChildOfPermission && permission.isGranted) {\r\n return { ...permission, isGranted: false };\r\n }\r\n\r\n if (isParentOfPermission && !permission.isGranted) {\r\n return { ...permission, isGranted: true };\r\n }\r\n\r\n return permission;\r\n });\r\n }\r\n\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissions = this.permissions.map(per => {\r\n let updatedIsGranted = per.isGranted;\r\n\r\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\r\n updatedIsGranted = false;\r\n }\r\n\r\n if (parentNames.has(per.name)) {\r\n updatedIsGranted = true;\r\n }\r\n\r\n return { ...per, isGranted: updatedIsGranted };\r\n });\r\n }\r\n return;\r\n }\r\n\r\n this.permissions = this.permissions.map(per => {\r\n const parents = findParentPermissions(this.permissions, per);\r\n if (parents.length > 0) {\r\n const rootParent = parents[parents.length - 1];\r\n\r\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\r\n return { ...per, isGranted: false };\r\n }\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n setTabCheckboxState() {\r\n const providerName = this.providerName;\r\n const selectablePermissions = this.selectedGroupPermissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === providerName),\r\n );\r\n\r\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const element = this.document.querySelector('#select-all-in-this-tabs') as any;\r\n if (!element) {\r\n return;\r\n }\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const providerName = this.providerName;\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = this.document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n if (this.filter()) {\r\n this.filter.set('');\r\n }\r\n\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n if (this.filter()) {\r\n this.setGrantCheckboxState();\r\n }\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onTabChange(groupName: string) {\r\n const group = this.permissionGroups().find(g => g.name === groupName);\r\n if (group) {\r\n this.onChangeGroup(group);\r\n }\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n });\r\n }\r\n\r\n openModal() {\r\n const providerName = this.providerName;\r\n const providerKey = this.providerKey;\r\n\r\n if (!providerKey || !providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(providerName, providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n const { groups } = permissionRes || {};\r\n\r\n this.data = permissionRes;\r\n this.permissionGroupSignal.set(groups);\r\n this.permissions = getPermissions(groups);\r\n this.setSelectedGroup(groups[0]);\r\n\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n const providerName = this.providerName;\r\n const providerKey = this.providerKey;\r\n\r\n if (providerName === 'R') return currentUser.roles.some(role => role === providerKey);\r\n\r\n if (providerName === 'U') return currentUser.id === providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findParentPermissions(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): PermissionGrantInfoDto[] {\r\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\r\n let currentPermission = permissionMap.get(permission.name) ?? null;\r\n const parentPermissions: PermissionGrantInfoDto[] = [];\r\n\r\n while (currentPermission && currentPermission.parentName) {\r\n const parentPermission = permissionMap.get(currentPermission.parentName);\r\n if (!parentPermission) {\r\n break;\r\n }\r\n parentPermissions.push(parentPermission);\r\n currentPermission = parentPermission;\r\n }\r\n\r\n return parentPermissions;\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<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\" ngTabs orientation=\"vertical\">\r\n <div class=\"col-md-4\">\r\n <div\r\n class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\"\r\n ngTabList\r\n orientation=\"vertical\"\r\n selectionMode=\"follow\"\r\n [selectedTab]=\"selectedGroup?.name\"\r\n (selectedTabChange)=\"onTabChange($event)\"\r\n >\r\n <div class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <button\r\n ngTab\r\n [value]=\"group.name\"\r\n class=\"nav-link pointer text-start w-100\"\r\n #tab=\"ngTab\"\r\n [class.active]=\"tab.selected()\"\r\n type=\"button\"\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 </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div ngTabPanel [value]=\"group.name\">\r\n <ng-template ngTabContent>\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 </ng-template>\r\n </div>\r\n }\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","export enum eResourcePermissionViewModes {\r\n List = 'list',\r\n Add = 'add',\r\n Edit = 'edit',\r\n}\r\n","import { Injectable, signal, computed } from '@angular/core';\r\nimport {\r\n ResourcePermissionGrantInfoDto,\r\n ResourceProviderDto,\r\n ResourcePermissionDefinitionDto,\r\n SearchProviderKeyInfo,\r\n ResourcePermissionWithProdiverGrantInfoDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { eResourcePermissionViewModes } from '../enums/view-modes';\r\n\r\n@Injectable()\r\nexport class ResourcePermissionStateService {\r\n // View state\r\n readonly viewMode = signal<eResourcePermissionViewModes>(eResourcePermissionViewModes.List);\r\n readonly modalBusy = signal(false);\r\n readonly hasResourcePermission = signal(false);\r\n readonly hasProviderKeyLookupService = signal(false);\r\n\r\n // Resource data\r\n readonly resourceName = signal('');\r\n readonly resourceKey = signal('');\r\n readonly resourceDisplayName = signal<string | undefined>(undefined);\r\n\r\n // Permissions data\r\n readonly allResourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);\r\n readonly resourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);\r\n readonly totalCount = signal(0);\r\n readonly permissionDefinitions = signal<ResourcePermissionDefinitionDto[]>([]);\r\n readonly permissionsWithProvider = signal<ResourcePermissionWithProdiverGrantInfoDto[]>([]);\r\n readonly selectedPermissions = signal<string[]>([]);\r\n\r\n // Provider data\r\n readonly providers = signal<ResourceProviderDto[]>([]);\r\n readonly selectedProviderName = signal('');\r\n readonly selectedProviderKey = signal('');\r\n\r\n // Edit mode specific\r\n readonly editProviderName = signal('');\r\n readonly editProviderKey = signal('');\r\n\r\n // Search state\r\n readonly searchFilter = signal('');\r\n readonly searchResults = signal<SearchProviderKeyInfo[]>([]);\r\n readonly showDropdown = signal(false);\r\n\r\n // Computed properties\r\n readonly isAddMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Add);\r\n readonly isEditMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Edit);\r\n readonly isListMode = computed(() => this.viewMode() === eResourcePermissionViewModes.List);\r\n\r\n readonly currentPermissionsList = computed(() =>\r\n this.isAddMode() ? this.permissionDefinitions() : this.permissionsWithProvider()\r\n );\r\n\r\n readonly allPermissionsSelected = computed(() => {\r\n const definitions = this.currentPermissionsList();\r\n return definitions.length > 0 &&\r\n definitions.every(p => this.selectedPermissions().includes(p.name || ''));\r\n });\r\n\r\n readonly canSave = computed(() => {\r\n if (this.isAddMode()) {\r\n return !!this.selectedProviderKey() && this.selectedPermissions().length > 0;\r\n }\r\n return this.selectedPermissions().length >= 0;\r\n });\r\n\r\n // State transition methods\r\n goToListMode() {\r\n this.viewMode.set(eResourcePermissionViewModes.List);\r\n this.selectedPermissions.set([]);\r\n }\r\n\r\n goToAddMode() {\r\n this.viewMode.set(eResourcePermissionViewModes.Add);\r\n this.selectedPermissions.set([]);\r\n this.selectedProviderKey.set('');\r\n this.searchResults.set([]);\r\n this.searchFilter.set('');\r\n }\r\n\r\n prepareEditMode(grant: ResourcePermissionGrantInfoDto) {\r\n this.editProviderName.set(grant.providerName || '');\r\n this.editProviderKey.set(grant.providerKey || '');\r\n }\r\n\r\n setEditModePermissions(permissions: ResourcePermissionWithProdiverGrantInfoDto[]) {\r\n this.permissionsWithProvider.set(permissions);\r\n this.selectedPermissions.set(\r\n permissions.filter(p => p.isGranted).map(p => p.name || '')\r\n );\r\n this.viewMode.set(eResourcePermissionViewModes.Edit);\r\n }\r\n\r\n // Permission selection methods\r\n togglePermission(permissionName: string) {\r\n const current = this.selectedPermissions();\r\n if (current.includes(permissionName)) {\r\n this.selectedPermissions.set(current.filter(p => p !== permissionName));\r\n } else {\r\n this.selectedPermissions.set([...current, permissionName]);\r\n }\r\n }\r\n\r\n toggleAllPermissions(selectAll: boolean) {\r\n const permissions = this.currentPermissionsList();\r\n this.selectedPermissions.set(\r\n selectAll ? permissions.map(p => p.name || '') : []\r\n );\r\n }\r\n\r\n isPermissionSelected(permissionName: string): boolean {\r\n return this.selectedPermissions().includes(permissionName);\r\n }\r\n\r\n // Provider search methods\r\n onProviderChange(providerName: string) {\r\n this.selectedProviderName.set(providerName);\r\n this.selectedProviderKey.set('');\r\n this.searchResults.set([]);\r\n this.searchFilter.set('');\r\n }\r\n\r\n selectProviderKey(key: SearchProviderKeyInfo) {\r\n this.selectedProviderKey.set(key.providerKey || '');\r\n this.searchFilter.set(key.providerDisplayName || key.providerKey || '');\r\n this.searchResults.set([]);\r\n this.showDropdown.set(false);\r\n }\r\n\r\n // Reset all state\r\n reset() {\r\n this.viewMode.set(eResourcePermissionViewModes.List);\r\n this.allResourcePermissions.set([]);\r\n this.resourcePermissions.set([]);\r\n this.totalCount.set(0);\r\n this.selectedProviderName.set('');\r\n this.selectedProviderKey.set('');\r\n this.searchFilter.set('');\r\n this.selectedPermissions.set([]);\r\n this.searchResults.set([]);\r\n this.editProviderName.set('');\r\n this.editProviderKey.set('');\r\n }\r\n\r\n // Data loading helpers\r\n setResourceData(permissions: ResourcePermissionGrantInfoDto[]) {\r\n this.allResourcePermissions.set(permissions);\r\n this.totalCount.set(permissions.length);\r\n }\r\n\r\n setProviders(providers: ResourceProviderDto[]) {\r\n this.providers.set(providers);\r\n this.hasProviderKeyLookupService.set(providers.length > 0);\r\n if (providers.length) {\r\n this.selectedProviderName.set(providers[0].name || '');\r\n }\r\n }\r\n\r\n setDefinitions(permissions: ResourcePermissionDefinitionDto[]) {\r\n this.permissionDefinitions.set(permissions);\r\n this.hasResourcePermission.set(permissions.length > 0);\r\n }\r\n}\r\n","import { EntityProp, ePropType } from '@abp/ng.components/extensible';\r\nimport { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { of } from 'rxjs';\r\n\r\nexport const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS = EntityProp.createMany<ResourcePermissionGrantInfoDto>([\r\n {\r\n type: ePropType.String,\r\n name: 'providerWithKey',\r\n displayName: 'AbpPermissionManagement::Provider',\r\n sortable: false,\r\n valueResolver: data => {\r\n const providerName = data.record.providerName || '';\r\n const providerDisplayName = data.record.providerDisplayName || data.record.providerKey || '';\r\n // Get first letter of provider name for abbreviation\r\n const abbr = providerName.charAt(0).toUpperCase();\r\n return of(\r\n `<span class=\"d-inline-block bg-light rounded-pill px-2 me-1 ms-1 mb-1\" title=\"${data.record.providerNameDisplayName || providerName}\">${abbr}</span>${providerDisplayName}`\r\n );\r\n },\r\n },\r\n {\r\n type: ePropType.String,\r\n name: 'permissions',\r\n displayName: 'AbpPermissionManagement::Permissions',\r\n sortable: false,\r\n valueResolver: data => {\r\n const permissions = data.record.permissions || [];\r\n const pills = permissions\r\n .map(p => `<span class=\"d-inline-block bg-light rounded-pill px-2 me-1 mb-1\">${p.displayName}</span>`)\r\n .join('');\r\n return of(pills);\r\n },\r\n },\r\n]);\r\n","import { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { EntityPropContributorCallback } from '@abp/ng.components/extensible';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS } from '../defaults/default-resource-permission-entity-props';\r\nimport { ePermissionManagementComponents } from '../enums/components';\r\n\r\nexport const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP = {\r\n [ePermissionManagementComponents.ResourcePermissions]: DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS,\r\n};\r\n\r\nexport const RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS = new InjectionToken<EntityPropContributors>(\r\n 'RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS',\r\n);\r\n\r\ntype EntityPropContributors = Partial<{\r\n [ePermissionManagementComponents.ResourcePermissions]: EntityPropContributorCallback<ResourcePermissionGrantInfoDto>[];\r\n}>;\r\n","import {\r\n ExtensionsService,\r\n mergeWithDefaultProps,\r\n} from '@abp/ng.components/extensible';\r\nimport { inject } from '@angular/core';\r\nimport {\r\n RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS,\r\n DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,\r\n} from '../tokens';\r\n\r\nexport function configureResourcePermissionExtensions() {\r\n const extensions = inject(ExtensionsService);\r\n\r\n const config = { optional: true };\r\n\r\n const propContributors = inject(RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS, config) || {};\r\n\r\n mergeWithDefaultProps(\r\n extensions.entityProps,\r\n DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,\r\n propContributors,\r\n );\r\n}\r\n","import { Component, inject, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { ListService, LocalizationPipe } from '@abp/ng.core';\r\nimport { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';\r\nimport { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\nimport { ePermissionManagementComponents } from '../../../enums/components';\r\nimport { configureResourcePermissionExtensions } from '../../../services/extensions.service';\r\n\r\n@Component({\r\n selector: 'abp-resource-permission-list',\r\n templateUrl: './resource-permission-list.component.html',\r\n providers: [\r\n ListService,\r\n {\r\n provide: EXTENSIONS_IDENTIFIER,\r\n useValue: ePermissionManagementComponents.ResourcePermissions,\r\n },\r\n ],\r\n imports: [LocalizationPipe, ExtensibleTableComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ResourcePermissionListComponent {\r\n readonly state = inject(ResourcePermissionStateService);\r\n readonly list = inject(ListService);\r\n\r\n readonly addClicked = output<void>();\r\n readonly editClicked = output<ResourcePermissionGrantInfoDto>();\r\n readonly deleteClicked = output<ResourcePermissionGrantInfoDto>();\r\n\r\n constructor() {\r\n configureResourcePermissionExtensions();\r\n }\r\n}\r\n","<div class=\"d-grid gap-2 mb-3 d-md-flex justify-content-md-end\">\r\n <button class=\"btn btn-sm btn-primary\" type=\"button\" (click)=\"addClicked.emit()\">\r\n <i class=\"fa fa-plus me-1\"></i>\r\n {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n </button>\r\n</div>\r\n\r\n<ng-template #actionsTemplate let-row>\r\n <div class=\"btn-group btn-group-sm\" role=\"group\">\r\n <button\r\n class=\"btn btn-outline-primary\"\r\n type=\"button\"\r\n (click)=\"editClicked.emit(row)\"\r\n [title]=\"'AbpUi::Edit' | abpLocalization\"\r\n >\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button\r\n class=\"btn btn-outline-danger\"\r\n type=\"button\"\r\n (click)=\"deleteClicked.emit(row)\"\r\n [title]=\"'AbpUi::Delete' | abpLocalization\"\r\n >\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n@if (state.resourcePermissions().length > 0) {\r\n <abp-extensible-table\r\n [data]=\"state.resourcePermissions()\"\r\n [recordsTotal]=\"state.totalCount()\"\r\n [list]=\"list\"\r\n [actionsTemplate]=\"actionsTemplate\"\r\n actionsText=\"AbpUi::Actions\"\r\n />\r\n} @else {\r\n <div class=\"alert alert-info\">\r\n {{ 'AbpPermissionManagement::NoPermissionsAssigned' | abpLocalization }}\r\n </div>\r\n}\r\n","import {\r\n Component,\r\n input,\r\n inject,\r\n OnInit,\r\n ChangeDetectionStrategy,\r\n DestroyRef,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { PermissionsService } from '@abp/ng.permission-management/proxy';\r\nimport { LookupSearchComponent, LookupItem } from '@abp/ng.components/lookup';\r\nimport { Observable, map } from 'rxjs';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\n\r\ninterface ProviderKeyLookupItem extends LookupItem {\r\n providerKey: string;\r\n providerDisplayName?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'abp-provider-key-search',\r\n templateUrl: './provider-key-search.component.html',\r\n imports: [LookupSearchComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProviderKeySearchComponent implements OnInit {\r\n readonly state = inject(ResourcePermissionStateService);\r\n private readonly service = inject(PermissionsService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly resourceName = input.required<string>();\r\n\r\n searchFn: (filter: string) => Observable<ProviderKeyLookupItem[]> = () => new Observable();\r\n\r\n ngOnInit() {\r\n this.searchFn = (filter: string) => this.loadProviderKeys(filter);\r\n }\r\n\r\n onItemSelected(item: ProviderKeyLookupItem) {\r\n // State is already updated via displayValue and selectedValue bindings\r\n // This handler can be used for additional side effects if needed\r\n }\r\n\r\n private loadProviderKeys(filter: string): Observable<ProviderKeyLookupItem[]> {\r\n const providerName = this.state.selectedProviderName();\r\n if (!providerName) {\r\n return new Observable(subscriber => {\r\n subscriber.next([]);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n return this.service\r\n .searchResourceProviderKey(this.resourceName(), providerName, filter, 1)\r\n .pipe(\r\n map(res =>\r\n (res.keys || []).map(k => ({\r\n key: k.providerKey || '',\r\n displayName: k.providerDisplayName || k.providerKey || '',\r\n providerKey: k.providerKey || '',\r\n providerDisplayName: k.providerDisplayName || undefined,\r\n })),\r\n ),\r\n takeUntilDestroyed(this.destroyRef),\r\n );\r\n }\r\n}\r\n","<abp-lookup-search\r\n label=\"AbpPermissionManagement::SearchProviderKey\"\r\n placeholder=\"AbpPermissionManagement::SearchProviderKey\"\r\n [searchFn]=\"searchFn\"\r\n [displayValue]=\"state.searchFilter()\"\r\n (displayValueChange)=\"state.searchFilter.set($event)\"\r\n [selectedValue]=\"state.selectedProviderKey()\"\r\n (selectedValueChange)=\"state.selectedProviderKey.set($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n/>\r\n","import { Component, input, inject, ChangeDetectionStrategy } from '@angular/core';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\n\r\ninterface PermissionItem {\r\n name?: string | null;\r\n displayName?: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'abp-permission-checkbox-list',\r\n templateUrl: './permission-checkbox-list.component.html',\r\n styleUrl: './permission-checkbox-list.component.scss',\r\n imports: [LocalizationPipe],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PermissionCheckboxListComponent {\r\n readonly state = inject(ResourcePermissionStateService);\r\n\r\n readonly permissions = input.required<PermissionItem[]>();\r\n readonly idPrefix = input<string>('default');\r\n readonly title = input<string>('AbpPermissionManagement::ResourcePermissionPermissions');\r\n readonly showTitle = input<boolean>(true);\r\n}\r\n","<div class=\"mb-3\">\r\n @if (showTitle()) {\r\n <h5>{{ title() | abpLocalization }}</h5>\r\n }\r\n <div class=\"form-check form-switch mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"grantAll-{{ idPrefix() }}\"\r\n [checked]=\"state.allPermissionsSelected()\"\r\n (change)=\"state.toggleAllPermissions(!state.allPermissionsSelected())\"\r\n />\r\n <label class=\"form-check-label\" for=\"grantAll-{{ idPrefix() }}\">\r\n {{ 'AbpPermissionManagement::GrantAllResourcePermissions' | abpLocalization }}\r\n </label>\r\n </div>\r\n <div class=\"abp-permission-list-container border rounded p-3\">\r\n @for (perm of permissions(); track perm.name) {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"perm-{{ idPrefix() }}-{{ perm.name }}\"\r\n [checked]=\"state.isPermissionSelected(perm.name || '')\"\r\n (change)=\"state.togglePermission(perm.name || '')\"\r\n />\r\n <label class=\"form-check-label\" for=\"perm-{{ idPrefix() }}-{{ perm.name }}\">\r\n {{ perm.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, input, inject, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\nimport { ProviderKeySearchComponent } from '../provider-key-search/provider-key-search.component';\r\nimport { PermissionCheckboxListComponent } from '../permission-checkbox-list/permission-checkbox-list.component';\r\n\r\nimport { eResourcePermissionViewModes } from '../../../enums/view-modes';\r\n\r\n@Component({\r\n selector: 'abp-resource-permission-form',\r\n templateUrl: './resource-permission-form.component.html',\r\n imports: [\r\n FormsModule,\r\n LocalizationPipe,\r\n ProviderKeySearchComponent,\r\n PermissionCheckboxListComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ResourcePermissionFormComponent {\r\n readonly state = inject(ResourcePermissionStateService);\r\n readonly eResourcePermissionViewModes = eResourcePermissionViewModes;\r\n\r\n readonly mode = input.required<eResourcePermissionViewModes>();\r\n readonly resourceName = input.required<string>();\r\n\r\n readonly save = output<void>();\r\n readonly cancel = output<void>();\r\n}\r\n\r\n","@if (mode() === eResourcePermissionViewModes.Add) {\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-bold\">\r\n {{ 'AbpPermissionManagement::SelectProvider' | abpLocalization }}\r\n </label>\r\n <div class=\"mb-2\">\r\n @for (provider of state.providers(); track provider.name; let i = $index) {\r\n <div class=\"form-check form-check-inline\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [id]=\"'provider-' + i\"\r\n [value]=\"provider.name\"\r\n [checked]=\"state.selectedProviderName() === provider.name\"\r\n (change)=\"state.onProviderChange(provider.name || '')\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'provider-' + i\">\r\n {{ provider.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n <abp-provider-key-search [resourceName]=\"resourceName()\" />\r\n </div>\r\n\r\n <abp-permission-checkbox-list [permissions]=\"state.permissionDefinitions()\" idPrefix=\"add\" />\r\n} @else {\r\n <div class=\"mb-3\" id=\"permissionList\">\r\n <abp-permission-checkbox-list\r\n [permissions]=\"state.permissionsWithProvider()\"\r\n idPrefix=\"edit\"\r\n [showTitle]=\"false\"\r\n />\r\n </div>\r\n}\r\n","import { ListService, LocalizationPipe } from '@abp/ng.core';\r\nimport {\r\n ButtonComponent,\r\n Confirmation,\r\n ConfirmationService,\r\n ModalCloseDirective,\r\n ModalComponent,\r\n ToasterService,\r\n} from '@abp/ng.theme.shared';\r\nimport {\r\n PermissionsService,\r\n ResourcePermissionGrantInfoDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { Component, inject, input, model, OnInit, effect, untracked, signal } from '@angular/core';\r\nimport { finalize, switchMap, of } from 'rxjs';\r\nimport { ResourcePermissionStateService } from '../../services/resource-permission-state.service';\r\nimport { ResourcePermissionListComponent } from './resource-permission-list/resource-permission-list.component';\r\nimport { ResourcePermissionFormComponent } from './resource-permission-form/resource-permission-form.component';\r\n\r\nimport { eResourcePermissionViewModes } from '../../enums/view-modes';\r\n\r\nconst DEFAULT_MAX_RESULT_COUNT = 10;\r\n\r\n@Component({\r\n selector: 'abp-resource-permission-management',\r\n templateUrl: './resource-permission-management.component.html',\r\n exportAs: 'abpResourcePermissionManagement',\r\n providers: [ResourcePermissionStateService, ListService],\r\n imports: [\r\n ModalComponent,\r\n LocalizationPipe,\r\n ButtonComponent,\r\n ModalCloseDirective,\r\n ResourcePermissionListComponent,\r\n ResourcePermissionFormComponent,\r\n ],\r\n})\r\nexport class ResourcePermissionManagementComponent implements OnInit {\r\n readonly eResourcePermissionViewModes = eResourcePermissionViewModes;\r\n\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly toasterService = inject(ToasterService);\r\n protected readonly confirmationService = inject(ConfirmationService);\r\n protected readonly state = inject(ResourcePermissionStateService);\r\n private readonly list = inject(ListService);\r\n\r\n readonly resourceName = input.required<string>();\r\n readonly resourceKey = input.required<string>();\r\n readonly resourceDisplayName = input<string>();\r\n\r\n readonly visible = model<boolean>(false);\r\n\r\n private readonly previousVisible = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const resourceName = this.resourceName();\r\n const resourceKey = this.resourceKey();\r\n const resourceDisplayName = this.resourceDisplayName();\r\n\r\n untracked(() => {\r\n this.state.resourceName.set(resourceName);\r\n this.state.resourceKey.set(resourceKey);\r\n this.state.resourceDisplayName.set(resourceDisplayName);\r\n });\r\n });\r\n\r\n effect(() => {\r\n const isVisible = this.visible();\r\n const wasVisible = this.previousVisible();\r\n if (isVisible && !wasVisible) {\r\n this.openModal();\r\n } else if (!isVisible && wasVisible) {\r\n this.state.reset();\r\n }\r\n untracked(() => this.previousVisible.set(isVisible));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.list.maxResultCount = DEFAULT_MAX_RESULT_COUNT;\r\n\r\n this.list\r\n .hookToQuery(query => {\r\n const allData = this.state.allResourcePermissions();\r\n const skipCount = query.skipCount || 0;\r\n const maxResultCount = query.maxResultCount || DEFAULT_MAX_RESULT_COUNT;\r\n\r\n const paginatedData = allData.slice(skipCount, skipCount + maxResultCount);\r\n\r\n return of({\r\n items: paginatedData,\r\n totalCount: allData.length,\r\n });\r\n })\r\n .subscribe(result => {\r\n this.state.resourcePermissions.set(result.items);\r\n this.state.totalCount.set(result.totalCount);\r\n });\r\n }\r\n\r\n openModal() {\r\n this.state.modalBusy.set(true);\r\n\r\n this.service\r\n .getResource(this.resourceName(), this.resourceKey())\r\n .pipe(\r\n switchMap(permRes => {\r\n this.state.setResourceData(permRes.permissions || []);\r\n this.list.get();\r\n return this.service.getResourceProviderKeyLookupServices(this.resourceName());\r\n }),\r\n switchMap(providerRes => {\r\n this.state.setProviders(providerRes.providers || []);\r\n return this.service.getResourceDefinitions(this.resourceName());\r\n }),\r\n finalize(() => this.state.modalBusy.set(false)),\r\n )\r\n .subscribe({\r\n next: defRes => {\r\n this.state.setDefinitions(defRes.permissions || []);\r\n },\r\n error: () => {\r\n this.toasterService.error('AbpPermissionManagement::ErrorLoadingPermissions');\r\n },\r\n });\r\n }\r\n\r\n onAddClicked() {\r\n this.state.goToAddMode();\r\n }\r\n\r\n onEditClicked(grant: ResourcePermissionGrantInfoDto) {\r\n this.state.prepareEditMode(grant);\r\n this.state.modalBusy.set(true);\r\n\r\n this.service\r\n .getResourceByProvider(\r\n this.resourceName(),\r\n this.resourceKey(),\r\n grant.providerName || '',\r\n grant.providerKey || '',\r\n )\r\n .pipe(finalize(() => this.state.modalBusy.set(false)))\r\n .subscribe({\r\n next: res => {\r\n this.state.setEditModePermissions(res.permissions || []);\r\n },\r\n });\r\n }\r\n\r\n onDeleteClicked(grant: ResourcePermissionGrantInfoDto) {\r\n this.confirmationService\r\n .warn(\r\n 'AbpPermissionManagement::ResourcePermissionDeletionConfirmationMessage',\r\n 'AbpPermissionManagement::AreYouSure',\r\n {\r\n messageLocalizationParams: [grant.providerKey || ''],\r\n },\r\n )\r\n .subscribe((status: Confirmation.Status) => {\r\n if (status === Confirmation.Status.confirm) {\r\n this.state.modalBusy.set(true);\r\n this.service\r\n .deleteResource(\r\n this.resourceName(),\r\n this.resourceKey(),\r\n grant.providerName || '',\r\n grant.providerKey || '',\r\n )\r\n .pipe(\r\n switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),\r\n finalize(() => this.state.modalBusy.set(false)),\r\n )\r\n .subscribe({\r\n next: res => {\r\n this.state.setResourceData(res.permissions || []);\r\n this.list.get();\r\n this.toasterService.success('AbpUi::DeletedSuccessfully');\r\n },\r\n });\r\n }\r\n });\r\n }\r\n\r\n savePermission() {\r\n const isEdit = this.state.isEditMode();\r\n const providerName = isEdit ? this.state.editProviderName() : this.state.selectedProviderName();\r\n const providerKey = isEdit ? this.state.editProviderKey() : this.state.selectedProviderKey();\r\n\r\n if (!isEdit && !this.state.canSave()) {\r\n this.toasterService.warn('AbpPermissionManagement::PleaseSelectProviderAndPermissions');\r\n return;\r\n }\r\n\r\n this.state.modalBusy.set(true);\r\n this.service\r\n .updateResource(this.resourceName(), this.resourceKey(), {\r\n providerName,\r\n providerKey,\r\n permissions: this.state.selectedPermissions(),\r\n })\r\n .pipe(\r\n switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),\r\n finalize(() => this.state.modalBusy.set(false)),\r\n )\r\n .subscribe({\r\n next: res => {\r\n this.state.setResourceData(res.permissions || []);\r\n this.list.get();\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n this.state.goToListMode();\r\n },\r\n });\r\n }\r\n}\r\n","<abp-modal\r\n [(visible)]=\"visible\"\r\n [busy]=\"state.modalBusy()\"\r\n [options]=\"{ size: 'xl', scrollable: false }\"\r\n>\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">\r\n @switch (state.viewMode()) {\r\n @case (eResourcePermissionViewModes.Edit) {\r\n {{ 'AbpPermissionManagement::UpdatePermission' | abpLocalization }}\r\n }\r\n @case (eResourcePermissionViewModes.Add) {\r\n {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n }\r\n @default {\r\n {{ 'AbpPermissionManagement::ResourcePermissions' | abpLocalization }}\r\n @if (resourceDisplayName()) {\r\n - {{ resourceDisplayName() }}\r\n }\r\n }\r\n }\r\n </h5>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (!state.hasResourcePermission() || !state.hasProviderKeyLookupService()) {\r\n <div class=\"alert alert-warning\" role=\"alert\">\r\n @if (!state.hasResourcePermission()) {\r\n {{ 'AbpPermissionManagement::NoResourcePermissionFound' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpPermissionManagement::NoResourceProviderKeyLookupServiceFound' | abpLocalization }}\r\n }\r\n </div>\r\n } @else {\r\n @switch (state.viewMode()) {\r\n @case (eResourcePermissionViewModes.List) {\r\n <abp-resource-permission-list\r\n (addClicked)=\"onAddClicked()\"\r\n (editClicked)=\"onEditClicked($event)\"\r\n (deleteClicked)=\"onDeleteClicked($event)\"\r\n />\r\n }\r\n @case (eResourcePermissionViewModes.Add) {\r\n <abp-resource-permission-form mode=\"add\" [resourceName]=\"resourceName()\" />\r\n }\r\n @case (eResourcePermissionViewModes.Edit) {\r\n <abp-resource-permission-form mode=\"edit\" [resourceName]=\"resourceName()\" />\r\n }\r\n }\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n @if (state.isListMode()) {\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Close' | abpLocalization }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"state.goToListMode()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"savePermission()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n }\r\n </ng-template>\r\n</abp-modal>\r\n","import { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [PermissionManagementComponent],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","finalize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/enums/view-modes.ts","../../../../packages/permission-management/src/lib/services/resource-permission-state.service.ts","../../../../packages/permission-management/src/lib/defaults/default-resource-permission-entity-props.ts","../../../../packages/permission-management/src/lib/tokens/extensions.token.ts","../../../../packages/permission-management/src/lib/services/extensions.service.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport { ConfigStateService, CurrentUserDto, LocalizationPipe } from '@abp/ng.core';\r\nimport {\r\n ButtonComponent,\r\n LocaleDirection,\r\n ModalCloseDirective,\r\n ModalComponent,\r\n ToasterService,\r\n} from '@abp/ng.theme.shared';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport {\r\n afterNextRender,\r\n Component,\r\n computed,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n output,\r\n signal,\r\n TrackByFunction,\r\n untracked,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { Tabs, TabList, Tab, TabPanel, TabContent } from '@angular/aria/tabs';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .scroll-in-modal {\r\n overflow: auto;\r\n /*\r\n To maintain a 28px top margin and 28px bottom margin when the modal reaches full height, the scrollable area needs to be 100vh - 23.1rem\r\n */\r\n max-height: calc(100vh - 23.1rem);\r\n }\r\n\r\n .lpx-scroll-pills-container .nav-pills {\r\n display: block;\r\n overflow-y: auto;\r\n }\r\n\r\n /* Target mobile screens */\r\n @media (max-width: 768px) {\r\n .scroll-in-modal {\r\n max-height: calc(100vh - 15rem);\r\n }\r\n .lpx-scroll-pills-container .nav-pills {\r\n max-height: 500px;\r\n }\r\n }\r\n\r\n fieldset legend {\r\n float: none;\r\n width: auto;\r\n }\r\n\r\n .lpx-scroll-pills-container .tab-content {\r\n padding-top: 0 !important;\r\n padding-bottom: 0 !important;\r\n }\r\n\r\n .lpx-scroll-pills-container .nav-item {\r\n margin-bottom: 10px;\r\n border-radius: 10px;\r\n }\r\n\r\n .lpx-scroll-pills-container .nav-item .nav-link.active {\r\n color: #fff !important;\r\n border-color: #6c5dd3 !important;\r\n background-color: #6c5dd3 !important;\r\n }\r\n `,\r\n ],\r\n imports: [\r\n FormsModule,\r\n NgStyle,\r\n ModalComponent,\r\n LocalizationPipe,\r\n ButtonComponent,\r\n ModalCloseDirective,\r\n Tabs,\r\n TabList,\r\n Tab,\r\n TabPanel,\r\n TabContent,\r\n ],\r\n})\r\nexport class PermissionManagementComponent {\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly configState = inject(ConfigStateService);\r\n protected readonly toasterService = inject(ToasterService);\r\n private readonly injector = inject(Injector);\r\n private document = inject(DOCUMENT);\r\n\r\n\r\n readonly providerNameInput = input('', { alias: 'providerName' });\r\n readonly providerKeyInput = input('', { alias: 'providerKey' });\r\n readonly hideBadgesInput = input(false, { alias: 'hideBadges' });\r\n readonly entityDisplayName = input<string | undefined>(undefined);\r\n readonly visibleInput = input(false, { alias: 'visible' });\r\n\r\n // Output signals\r\n readonly visibleChange = output<boolean>();\r\n\r\n // Internal state\r\n protected readonly _visible = signal(false);\r\n\r\n // Backward-compatible getters/setters for ReplaceableTemplateDirective.\r\n private _providerNameOverride?: string;\r\n get providerName(): string {\r\n return this._providerNameOverride ?? this.providerNameInput();\r\n }\r\n set providerName(value: string) {\r\n this._providerNameOverride = value;\r\n }\r\n\r\n private _providerKeyOverride?: string;\r\n get providerKey(): string {\r\n return this._providerKeyOverride ?? this.providerKeyInput();\r\n }\r\n set providerKey(value: string) {\r\n this._providerKeyOverride = value;\r\n }\r\n\r\n private _hideBadgesOverride?: boolean;\r\n get hideBadges(): boolean {\r\n return this._hideBadgesOverride ?? this.hideBadgesInput();\r\n }\r\n set hideBadges(value: boolean) {\r\n this._hideBadgesOverride = value;\r\n }\r\n\r\n selectAllInThisTabsRef = viewChildren<ElementRef<HTMLInputElement>>('selectAllInThisTabsRef');\r\n selectAllInAllTabsRef = viewChildren<ElementRef<HTMLInputElement>>('selectAllInAllTabsRef');\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n filter = signal<string>('');\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n permissionGroups = computed(() => {\r\n const search = this.filter().toLowerCase().trim();\r\n let groups = this.permissionGroupSignal();\r\n\r\n if (!search) {\r\n this.setSelectedGroup(groups[0]);\r\n return groups;\r\n }\r\n\r\n const includesSearch = text => text.toLowerCase().includes(search);\r\n groups = groups.filter(group =>\r\n group.permissions.some(\r\n permission => includesSearch(permission.displayName) || includesSearch(group.displayName),\r\n ),\r\n );\r\n\r\n if (groups.length) {\r\n this.setSelectedGroup(groups[0]);\r\n } else {\r\n this.selectedGroupPermissions = [];\r\n }\r\n\r\n return groups;\r\n });\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n // Getter/setter for visible - used by ReplaceableTemplateDirective and internal code\r\n get visible(): boolean {\r\n return this._visible();\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible()) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible.set(true);\r\n this.visibleChange.emit(true);\r\n afterNextRender(() => {\r\n this.initModal();\r\n }, { injector: this.injector });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible.set(false);\r\n this.visibleChange.emit(false);\r\n this.filter.set('');\r\n }\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const inputValue = this.visibleInput();\r\n untracked(() => {\r\n if (this._visible() !== inputValue) {\r\n if (inputValue) {\r\n this.openModal().subscribe(() => {\r\n this._visible.set(true);\r\n afterNextRender(() => {\r\n this.initModal();\r\n }, { injector: this.injector });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible.set(false);\r\n this.filter.set('');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${\r\n (this.document.body?.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n }) as unknown as PermissionWithStyle,\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n const { isGranted, grantedProviders } = clickedPermission;\r\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\r\n return;\r\n }\r\n\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissions = this.permissions.map(permission => {\r\n const isExactMatch = clickedPermission.name == permission.name;\r\n const isParentOfPermission = clickedPermission.parentName === permission.name;\r\n const isChildOfPermission = clickedPermission.name === permission.parentName;\r\n\r\n if (isExactMatch) {\r\n return { ...permission, isGranted: !permission.isGranted };\r\n }\r\n\r\n if (isChildOfPermission && permission.isGranted) {\r\n return { ...permission, isGranted: false };\r\n }\r\n\r\n if (isParentOfPermission && !permission.isGranted) {\r\n return { ...permission, isGranted: true };\r\n }\r\n\r\n return permission;\r\n });\r\n }\r\n\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissions = this.permissions.map(per => {\r\n let updatedIsGranted = per.isGranted;\r\n\r\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\r\n updatedIsGranted = false;\r\n }\r\n\r\n if (parentNames.has(per.name)) {\r\n updatedIsGranted = true;\r\n }\r\n\r\n return { ...per, isGranted: updatedIsGranted };\r\n });\r\n }\r\n return;\r\n }\r\n\r\n this.permissions = this.permissions.map(per => {\r\n const parents = findParentPermissions(this.permissions, per);\r\n if (parents.length > 0) {\r\n const rootParent = parents[parents.length - 1];\r\n\r\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\r\n return { ...per, isGranted: false };\r\n }\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n setTabCheckboxState() {\r\n const providerName = this.providerName;\r\n const selectablePermissions = this.selectedGroupPermissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === providerName),\r\n );\r\n\r\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const element = this.document.querySelector('#select-all-in-this-tabs') as any;\r\n if (!element) {\r\n return;\r\n }\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const providerName = this.providerName;\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = this.document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n if (this.filter()) {\r\n this.filter.set('');\r\n }\r\n\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n if (this.filter()) {\r\n this.setGrantCheckboxState();\r\n }\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onTabChange(groupName: string) {\r\n const group = this.permissionGroups().find(g => g.name === groupName);\r\n if (group) {\r\n this.onChangeGroup(group);\r\n }\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n });\r\n }\r\n\r\n openModal() {\r\n const providerName = this.providerName;\r\n const providerKey = this.providerKey;\r\n\r\n if (!providerKey || !providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(providerName, providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n const { groups } = permissionRes || {};\r\n\r\n this.data = permissionRes;\r\n this.permissionGroupSignal.set(groups);\r\n this.permissions = getPermissions(groups);\r\n this.setSelectedGroup(groups[0]);\r\n\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n const providerName = this.providerName;\r\n const providerKey = this.providerKey;\r\n\r\n if (providerName === 'R') return currentUser.roles.some(role => role === providerKey);\r\n\r\n if (providerName === 'U') return currentUser.id === providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findParentPermissions(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): PermissionGrantInfoDto[] {\r\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\r\n let currentPermission = permissionMap.get(permission.name) ?? null;\r\n const parentPermissions: PermissionGrantInfoDto[] = [];\r\n\r\n while (currentPermission && currentPermission.parentName) {\r\n const parentPermission = permissionMap.get(currentPermission.parentName);\r\n if (!parentPermission) {\r\n break;\r\n }\r\n parentPermissions.push(parentPermission);\r\n currentPermission = parentPermission;\r\n }\r\n\r\n return parentPermissions;\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<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\" ngTabs orientation=\"vertical\">\r\n <div class=\"col-md-4\">\r\n <div\r\n class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\"\r\n ngTabList\r\n orientation=\"vertical\"\r\n selectionMode=\"follow\"\r\n [selectedTab]=\"selectedGroup?.name\"\r\n (selectedTabChange)=\"onTabChange($event)\"\r\n >\r\n <div class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <button\r\n ngTab\r\n [value]=\"group.name\"\r\n class=\"nav-link pointer text-start w-100\"\r\n #tab=\"ngTab\"\r\n [class.active]=\"tab.selected()\"\r\n type=\"button\"\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 </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n @for (group of permissionGroups(); track $index) {\r\n <div ngTabPanel [value]=\"group.name\">\r\n <ng-template ngTabContent>\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 </ng-template>\r\n </div>\r\n }\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","export enum eResourcePermissionViewModes {\r\n List = 'list',\r\n Add = 'add',\r\n Edit = 'edit',\r\n}\r\n","import { Injectable, signal, computed } from '@angular/core';\r\nimport {\r\n ResourcePermissionGrantInfoDto,\r\n ResourceProviderDto,\r\n ResourcePermissionDefinitionDto,\r\n SearchProviderKeyInfo,\r\n ResourcePermissionWithProdiverGrantInfoDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { eResourcePermissionViewModes } from '../enums/view-modes';\r\n\r\n@Injectable()\r\nexport class ResourcePermissionStateService {\r\n // View state\r\n readonly viewMode = signal<eResourcePermissionViewModes>(eResourcePermissionViewModes.List);\r\n readonly modalBusy = signal(false);\r\n readonly hasResourcePermission = signal(false);\r\n readonly hasProviderKeyLookupService = signal(false);\r\n\r\n // Resource data\r\n readonly resourceName = signal('');\r\n readonly resourceKey = signal('');\r\n readonly resourceDisplayName = signal<string | undefined>(undefined);\r\n\r\n // Permissions data\r\n readonly allResourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);\r\n readonly resourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);\r\n readonly totalCount = signal(0);\r\n readonly permissionDefinitions = signal<ResourcePermissionDefinitionDto[]>([]);\r\n readonly permissionsWithProvider = signal<ResourcePermissionWithProdiverGrantInfoDto[]>([]);\r\n readonly selectedPermissions = signal<string[]>([]);\r\n\r\n // Provider data\r\n readonly providers = signal<ResourceProviderDto[]>([]);\r\n readonly selectedProviderName = signal('');\r\n readonly selectedProviderKey = signal('');\r\n\r\n // Edit mode specific\r\n readonly editProviderName = signal('');\r\n readonly editProviderKey = signal('');\r\n\r\n // Search state\r\n readonly searchFilter = signal('');\r\n readonly searchResults = signal<SearchProviderKeyInfo[]>([]);\r\n readonly showDropdown = signal(false);\r\n\r\n // Computed properties\r\n readonly isAddMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Add);\r\n readonly isEditMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Edit);\r\n readonly isListMode = computed(() => this.viewMode() === eResourcePermissionViewModes.List);\r\n\r\n readonly currentPermissionsList = computed(() =>\r\n this.isAddMode() ? this.permissionDefinitions() : this.permissionsWithProvider()\r\n );\r\n\r\n readonly allPermissionsSelected = computed(() => {\r\n const definitions = this.currentPermissionsList();\r\n return definitions.length > 0 &&\r\n definitions.every(p => this.selectedPermissions().includes(p.name || ''));\r\n });\r\n\r\n readonly canSave = computed(() => {\r\n if (this.isAddMode()) {\r\n return !!this.selectedProviderKey() && this.selectedPermissions().length > 0;\r\n }\r\n return this.selectedPermissions().length >= 0;\r\n });\r\n\r\n // State transition methods\r\n goToListMode() {\r\n this.viewMode.set(eResourcePermissionViewModes.List);\r\n this.selectedPermissions.set([]);\r\n }\r\n\r\n goToAddMode() {\r\n this.viewMode.set(eResourcePermissionViewModes.Add);\r\n this.selectedPermissions.set([]);\r\n this.selectedProviderKey.set('');\r\n this.searchResults.set([]);\r\n this.searchFilter.set('');\r\n }\r\n\r\n prepareEditMode(grant: ResourcePermissionGrantInfoDto) {\r\n this.editProviderName.set(grant.providerName || '');\r\n this.editProviderKey.set(grant.providerKey || '');\r\n }\r\n\r\n setEditModePermissions(permissions: ResourcePermissionWithProdiverGrantInfoDto[]) {\r\n this.permissionsWithProvider.set(permissions);\r\n this.selectedPermissions.set(\r\n permissions.filter(p => p.isGranted).map(p => p.name || '')\r\n );\r\n this.viewMode.set(eResourcePermissionViewModes.Edit);\r\n }\r\n\r\n // Permission selection methods\r\n togglePermission(permissionName: string) {\r\n const current = this.selectedPermissions();\r\n if (current.includes(permissionName)) {\r\n this.selectedPermissions.set(current.filter(p => p !== permissionName));\r\n } else {\r\n this.selectedPermissions.set([...current, permissionName]);\r\n }\r\n }\r\n\r\n toggleAllPermissions(selectAll: boolean) {\r\n const permissions = this.currentPermissionsList();\r\n this.selectedPermissions.set(\r\n selectAll ? permissions.map(p => p.name || '') : []\r\n );\r\n }\r\n\r\n isPermissionSelected(permissionName: string): boolean {\r\n return this.selectedPermissions().includes(permissionName);\r\n }\r\n\r\n // Provider search methods\r\n onProviderChange(providerName: string) {\r\n this.selectedProviderName.set(providerName);\r\n this.selectedProviderKey.set('');\r\n this.searchResults.set([]);\r\n this.searchFilter.set('');\r\n }\r\n\r\n selectProviderKey(key: SearchProviderKeyInfo) {\r\n this.selectedProviderKey.set(key.providerKey || '');\r\n this.searchFilter.set(key.providerDisplayName || key.providerKey || '');\r\n this.searchResults.set([]);\r\n this.showDropdown.set(false);\r\n }\r\n\r\n // Reset all state\r\n reset() {\r\n this.viewMode.set(eResourcePermissionViewModes.List);\r\n this.allResourcePermissions.set([]);\r\n this.resourcePermissions.set([]);\r\n this.totalCount.set(0);\r\n this.selectedProviderName.set('');\r\n this.selectedProviderKey.set('');\r\n this.searchFilter.set('');\r\n this.selectedPermissions.set([]);\r\n this.searchResults.set([]);\r\n this.editProviderName.set('');\r\n this.editProviderKey.set('');\r\n }\r\n\r\n // Data loading helpers\r\n setResourceData(permissions: ResourcePermissionGrantInfoDto[]) {\r\n this.allResourcePermissions.set(permissions);\r\n this.totalCount.set(permissions.length);\r\n }\r\n\r\n setProviders(providers: ResourceProviderDto[]) {\r\n this.providers.set(providers);\r\n this.hasProviderKeyLookupService.set(providers.length > 0);\r\n if (providers.length) {\r\n this.selectedProviderName.set(providers[0].name || '');\r\n }\r\n }\r\n\r\n setDefinitions(permissions: ResourcePermissionDefinitionDto[]) {\r\n this.permissionDefinitions.set(permissions);\r\n this.hasResourcePermission.set(permissions.length > 0);\r\n }\r\n}\r\n","import { EntityProp, ePropType } from '@abp/ng.components/extensible';\r\nimport { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { of } from 'rxjs';\r\n\r\nexport const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS = EntityProp.createMany<ResourcePermissionGrantInfoDto>([\r\n {\r\n type: ePropType.String,\r\n name: 'providerWithKey',\r\n displayName: 'AbpPermissionManagement::Provider',\r\n sortable: false,\r\n valueResolver: data => {\r\n const providerName = data.record.providerName || '';\r\n const providerDisplayName = data.record.providerDisplayName || data.record.providerKey || '';\r\n // Get first letter of provider name for abbreviation\r\n const abbr = providerName.charAt(0).toUpperCase();\r\n return of(\r\n `<span class=\"d-inline-block bg-light rounded-pill px-2 me-1 ms-1 mb-1\" title=\"${data.record.providerNameDisplayName || providerName}\">${abbr}</span>${providerDisplayName}`\r\n );\r\n },\r\n },\r\n {\r\n type: ePropType.String,\r\n name: 'permissions',\r\n displayName: 'AbpPermissionManagement::Permissions',\r\n sortable: false,\r\n valueResolver: data => {\r\n const permissions = data.record.permissions || [];\r\n const pills = permissions\r\n .map(p => `<span class=\"d-inline-block bg-light rounded-pill px-2 me-1 mb-1\">${p.displayName}</span>`)\r\n .join('');\r\n return of(pills);\r\n },\r\n },\r\n]);\r\n","import { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { EntityPropContributorCallback } from '@abp/ng.components/extensible';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS } from '../defaults/default-resource-permission-entity-props';\r\nimport { ePermissionManagementComponents } from '../enums/components';\r\n\r\nexport const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP = {\r\n [ePermissionManagementComponents.ResourcePermissions]: DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS,\r\n};\r\n\r\nexport const RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS = new InjectionToken<EntityPropContributors>(\r\n 'RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS',\r\n);\r\n\r\ntype EntityPropContributors = Partial<{\r\n [ePermissionManagementComponents.ResourcePermissions]: EntityPropContributorCallback<ResourcePermissionGrantInfoDto>[];\r\n}>;\r\n","import {\r\n ExtensionsService,\r\n mergeWithDefaultProps,\r\n} from '@abp/ng.components/extensible';\r\nimport { inject } from '@angular/core';\r\nimport {\r\n RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS,\r\n DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,\r\n} from '../tokens';\r\n\r\nexport function configureResourcePermissionExtensions() {\r\n const extensions = inject(ExtensionsService);\r\n\r\n const config = { optional: true };\r\n\r\n const propContributors = inject(RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS, config) || {};\r\n\r\n mergeWithDefaultProps(\r\n extensions.entityProps,\r\n DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,\r\n propContributors,\r\n );\r\n}\r\n","import { Component, inject, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { ListService, LocalizationPipe } from '@abp/ng.core';\r\nimport { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';\r\nimport { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\nimport { ePermissionManagementComponents } from '../../../enums/components';\r\nimport { configureResourcePermissionExtensions } from '../../../services/extensions.service';\r\n\r\n@Component({\r\n selector: 'abp-resource-permission-list',\r\n templateUrl: './resource-permission-list.component.html',\r\n providers: [\r\n ListService,\r\n {\r\n provide: EXTENSIONS_IDENTIFIER,\r\n useValue: ePermissionManagementComponents.ResourcePermissions,\r\n },\r\n ],\r\n imports: [LocalizationPipe, ExtensibleTableComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ResourcePermissionListComponent {\r\n readonly state = inject(ResourcePermissionStateService);\r\n readonly list = inject(ListService);\r\n\r\n readonly addClicked = output<void>();\r\n readonly editClicked = output<ResourcePermissionGrantInfoDto>();\r\n readonly deleteClicked = output<ResourcePermissionGrantInfoDto>();\r\n\r\n constructor() {\r\n configureResourcePermissionExtensions();\r\n }\r\n}\r\n","<div class=\"d-grid gap-2 mb-3 d-md-flex justify-content-md-end\">\r\n <button class=\"btn btn-sm btn-primary\" type=\"button\" (click)=\"addClicked.emit()\">\r\n <i class=\"fa fa-plus me-1\"></i>\r\n {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n </button>\r\n</div>\r\n\r\n<ng-template #actionsTemplate let-row>\r\n <div class=\"btn-group btn-group-sm\" role=\"group\">\r\n <button\r\n class=\"btn btn-outline-primary\"\r\n type=\"button\"\r\n (click)=\"editClicked.emit(row)\"\r\n [title]=\"'AbpUi::Edit' | abpLocalization\"\r\n >\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button\r\n class=\"btn btn-outline-danger\"\r\n type=\"button\"\r\n (click)=\"deleteClicked.emit(row)\"\r\n [title]=\"'AbpUi::Delete' | abpLocalization\"\r\n >\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n@if (state.resourcePermissions().length > 0) {\r\n <abp-extensible-table\r\n [data]=\"state.resourcePermissions()\"\r\n [recordsTotal]=\"state.totalCount()\"\r\n [list]=\"list\"\r\n [actionsTemplate]=\"actionsTemplate\"\r\n actionsText=\"AbpUi::Actions\"\r\n />\r\n} @else {\r\n <div class=\"alert alert-info\">\r\n {{ 'AbpPermissionManagement::NoPermissionsAssigned' | abpLocalization }}\r\n </div>\r\n}\r\n","import {\r\n Component,\r\n input,\r\n inject,\r\n OnInit,\r\n ChangeDetectionStrategy,\r\n DestroyRef,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { PermissionsService } from '@abp/ng.permission-management/proxy';\r\nimport { LookupSearchComponent, LookupItem } from '@abp/ng.components/lookup';\r\nimport { Observable, map } from 'rxjs';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\n\r\ninterface ProviderKeyLookupItem extends LookupItem {\r\n providerKey: string;\r\n providerDisplayName?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'abp-provider-key-search',\r\n templateUrl: './provider-key-search.component.html',\r\n imports: [LookupSearchComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProviderKeySearchComponent implements OnInit {\r\n readonly state = inject(ResourcePermissionStateService);\r\n private readonly service = inject(PermissionsService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly resourceName = input.required<string>();\r\n\r\n searchFn: (filter: string) => Observable<ProviderKeyLookupItem[]> = () => new Observable();\r\n\r\n ngOnInit() {\r\n this.searchFn = (filter: string) => this.loadProviderKeys(filter);\r\n }\r\n\r\n onItemSelected(item: ProviderKeyLookupItem) {\r\n // State is already updated via displayValue and selectedValue bindings\r\n // This handler can be used for additional side effects if needed\r\n }\r\n\r\n private loadProviderKeys(filter: string): Observable<ProviderKeyLookupItem[]> {\r\n const providerName = this.state.selectedProviderName();\r\n if (!providerName) {\r\n return new Observable(subscriber => {\r\n subscriber.next([]);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n return this.service\r\n .searchResourceProviderKey(this.resourceName(), providerName, filter, 1)\r\n .pipe(\r\n map(res =>\r\n (res.keys || []).map(k => ({\r\n key: k.providerKey || '',\r\n displayName: k.providerDisplayName || k.providerKey || '',\r\n providerKey: k.providerKey || '',\r\n providerDisplayName: k.providerDisplayName || undefined,\r\n })),\r\n ),\r\n takeUntilDestroyed(this.destroyRef),\r\n );\r\n }\r\n}\r\n","<abp-lookup-search\r\n label=\"AbpPermissionManagement::SearchProviderKey\"\r\n placeholder=\"AbpPermissionManagement::SearchProviderKey\"\r\n [searchFn]=\"searchFn\"\r\n [displayValue]=\"state.searchFilter()\"\r\n (displayValueChange)=\"state.searchFilter.set($event)\"\r\n [selectedValue]=\"state.selectedProviderKey()\"\r\n (selectedValueChange)=\"state.selectedProviderKey.set($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n/>\r\n","import { Component, input, inject, ChangeDetectionStrategy } from '@angular/core';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\n\r\ninterface PermissionItem {\r\n name?: string | null;\r\n displayName?: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'abp-permission-checkbox-list',\r\n templateUrl: './permission-checkbox-list.component.html',\r\n styleUrl: './permission-checkbox-list.component.scss',\r\n imports: [LocalizationPipe],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PermissionCheckboxListComponent {\r\n readonly state = inject(ResourcePermissionStateService);\r\n\r\n readonly permissions = input.required<PermissionItem[]>();\r\n readonly idPrefix = input<string>('default');\r\n readonly title = input<string>('AbpPermissionManagement::ResourcePermissionPermissions');\r\n readonly showTitle = input<boolean>(true);\r\n}\r\n","<div class=\"mb-3\">\r\n @if (showTitle()) {\r\n <h5>{{ title() | abpLocalization }}</h5>\r\n }\r\n <div class=\"form-check form-switch mb-2\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"grantAll-{{ idPrefix() }}\"\r\n [checked]=\"state.allPermissionsSelected()\"\r\n (change)=\"state.toggleAllPermissions(!state.allPermissionsSelected())\"\r\n />\r\n <label class=\"form-check-label\" for=\"grantAll-{{ idPrefix() }}\">\r\n {{ 'AbpPermissionManagement::GrantAllResourcePermissions' | abpLocalization }}\r\n </label>\r\n </div>\r\n <div class=\"abp-permission-list-container border rounded p-3\">\r\n @for (perm of permissions(); track perm.name) {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n id=\"perm-{{ idPrefix() }}-{{ perm.name }}\"\r\n [checked]=\"state.isPermissionSelected(perm.name || '')\"\r\n (change)=\"state.togglePermission(perm.name || '')\"\r\n />\r\n <label class=\"form-check-label\" for=\"perm-{{ idPrefix() }}-{{ perm.name }}\">\r\n {{ perm.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, input, inject, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\nimport { ProviderKeySearchComponent } from '../provider-key-search/provider-key-search.component';\r\nimport { PermissionCheckboxListComponent } from '../permission-checkbox-list/permission-checkbox-list.component';\r\n\r\nimport { eResourcePermissionViewModes } from '../../../enums/view-modes';\r\n\r\n@Component({\r\n selector: 'abp-resource-permission-form',\r\n templateUrl: './resource-permission-form.component.html',\r\n imports: [\r\n FormsModule,\r\n LocalizationPipe,\r\n ProviderKeySearchComponent,\r\n PermissionCheckboxListComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ResourcePermissionFormComponent {\r\n readonly state = inject(ResourcePermissionStateService);\r\n readonly eResourcePermissionViewModes = eResourcePermissionViewModes;\r\n\r\n readonly mode = input.required<eResourcePermissionViewModes>();\r\n readonly resourceName = input.required<string>();\r\n\r\n readonly save = output<void>();\r\n readonly cancel = output<void>();\r\n}\r\n\r\n","@if (mode() === eResourcePermissionViewModes.Add) {\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-bold\">\r\n {{ 'AbpPermissionManagement::SelectProvider' | abpLocalization }}\r\n </label>\r\n <div class=\"mb-2\">\r\n @for (provider of state.providers(); track provider.name; let i = $index) {\r\n <div class=\"form-check form-check-inline\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [id]=\"'provider-' + i\"\r\n [value]=\"provider.name\"\r\n [checked]=\"state.selectedProviderName() === provider.name\"\r\n (change)=\"state.onProviderChange(provider.name || '')\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'provider-' + i\">\r\n {{ provider.displayName }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n <abp-provider-key-search [resourceName]=\"resourceName()\" />\r\n </div>\r\n\r\n <abp-permission-checkbox-list [permissions]=\"state.permissionDefinitions()\" idPrefix=\"add\" />\r\n} @else {\r\n <div class=\"mb-3\" id=\"permissionList\">\r\n <abp-permission-checkbox-list\r\n [permissions]=\"state.permissionsWithProvider()\"\r\n idPrefix=\"edit\"\r\n [showTitle]=\"false\"\r\n />\r\n </div>\r\n}\r\n","import { ListService, LocalizationPipe } from '@abp/ng.core';\r\nimport {\r\n ButtonComponent,\r\n Confirmation,\r\n ConfirmationService,\r\n ModalCloseDirective,\r\n ModalComponent,\r\n ToasterService,\r\n} from '@abp/ng.theme.shared';\r\nimport {\r\n PermissionsService,\r\n ResourcePermissionGrantInfoDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { Component, inject, input, model, OnInit, effect, untracked, signal } from '@angular/core';\r\nimport { finalize, switchMap, of } from 'rxjs';\r\nimport { ResourcePermissionStateService } from '../../services/resource-permission-state.service';\r\nimport { ResourcePermissionListComponent } from './resource-permission-list/resource-permission-list.component';\r\nimport { ResourcePermissionFormComponent } from './resource-permission-form/resource-permission-form.component';\r\n\r\nimport { eResourcePermissionViewModes } from '../../enums/view-modes';\r\n\r\nconst DEFAULT_MAX_RESULT_COUNT = 10;\r\n\r\n@Component({\r\n selector: 'abp-resource-permission-management',\r\n templateUrl: './resource-permission-management.component.html',\r\n exportAs: 'abpResourcePermissionManagement',\r\n providers: [ResourcePermissionStateService, ListService],\r\n imports: [\r\n ModalComponent,\r\n LocalizationPipe,\r\n ButtonComponent,\r\n ModalCloseDirective,\r\n ResourcePermissionListComponent,\r\n ResourcePermissionFormComponent,\r\n ],\r\n})\r\nexport class ResourcePermissionManagementComponent implements OnInit {\r\n readonly eResourcePermissionViewModes = eResourcePermissionViewModes;\r\n\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly toasterService = inject(ToasterService);\r\n protected readonly confirmationService = inject(ConfirmationService);\r\n protected readonly state = inject(ResourcePermissionStateService);\r\n private readonly list = inject(ListService);\r\n\r\n readonly resourceName = input.required<string>();\r\n readonly resourceKey = input.required<string>();\r\n readonly resourceDisplayName = input<string>();\r\n\r\n readonly visible = model<boolean>(false);\r\n\r\n private readonly previousVisible = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const resourceName = this.resourceName();\r\n const resourceKey = this.resourceKey();\r\n const resourceDisplayName = this.resourceDisplayName();\r\n\r\n untracked(() => {\r\n this.state.resourceName.set(resourceName);\r\n this.state.resourceKey.set(resourceKey);\r\n this.state.resourceDisplayName.set(resourceDisplayName);\r\n });\r\n });\r\n\r\n effect(() => {\r\n const isVisible = this.visible();\r\n const wasVisible = this.previousVisible();\r\n if (isVisible && !wasVisible) {\r\n this.openModal();\r\n } else if (!isVisible && wasVisible) {\r\n this.state.reset();\r\n }\r\n untracked(() => this.previousVisible.set(isVisible));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.list.maxResultCount = DEFAULT_MAX_RESULT_COUNT;\r\n\r\n this.list\r\n .hookToQuery(query => {\r\n const allData = this.state.allResourcePermissions();\r\n const skipCount = query.skipCount || 0;\r\n const maxResultCount = query.maxResultCount || DEFAULT_MAX_RESULT_COUNT;\r\n\r\n const paginatedData = allData.slice(skipCount, skipCount + maxResultCount);\r\n\r\n return of({\r\n items: paginatedData,\r\n totalCount: allData.length,\r\n });\r\n })\r\n .subscribe(result => {\r\n this.state.resourcePermissions.set(result.items);\r\n this.state.totalCount.set(result.totalCount);\r\n });\r\n }\r\n\r\n openModal() {\r\n this.state.modalBusy.set(true);\r\n\r\n this.service\r\n .getResource(this.resourceName(), this.resourceKey())\r\n .pipe(\r\n switchMap(permRes => {\r\n this.state.setResourceData(permRes.permissions || []);\r\n this.list.get();\r\n return this.service.getResourceProviderKeyLookupServices(this.resourceName());\r\n }),\r\n switchMap(providerRes => {\r\n this.state.setProviders(providerRes.providers || []);\r\n return this.service.getResourceDefinitions(this.resourceName());\r\n }),\r\n finalize(() => this.state.modalBusy.set(false)),\r\n )\r\n .subscribe({\r\n next: defRes => {\r\n this.state.setDefinitions(defRes.permissions || []);\r\n },\r\n error: () => {\r\n this.toasterService.error('AbpPermissionManagement::ErrorLoadingPermissions');\r\n },\r\n });\r\n }\r\n\r\n onAddClicked() {\r\n this.state.goToAddMode();\r\n }\r\n\r\n onEditClicked(grant: ResourcePermissionGrantInfoDto) {\r\n this.state.prepareEditMode(grant);\r\n this.state.modalBusy.set(true);\r\n\r\n this.service\r\n .getResourceByProvider(\r\n this.resourceName(),\r\n this.resourceKey(),\r\n grant.providerName || '',\r\n grant.providerKey || '',\r\n )\r\n .pipe(finalize(() => this.state.modalBusy.set(false)))\r\n .subscribe({\r\n next: res => {\r\n this.state.setEditModePermissions(res.permissions || []);\r\n },\r\n });\r\n }\r\n\r\n onDeleteClicked(grant: ResourcePermissionGrantInfoDto) {\r\n this.confirmationService\r\n .warn(\r\n 'AbpPermissionManagement::ResourcePermissionDeletionConfirmationMessage',\r\n 'AbpPermissionManagement::AreYouSure',\r\n {\r\n messageLocalizationParams: [grant.providerKey || ''],\r\n },\r\n )\r\n .subscribe((status: Confirmation.Status) => {\r\n if (status === Confirmation.Status.confirm) {\r\n this.state.modalBusy.set(true);\r\n this.service\r\n .deleteResource(\r\n this.resourceName(),\r\n this.resourceKey(),\r\n grant.providerName || '',\r\n grant.providerKey || '',\r\n )\r\n .pipe(\r\n switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),\r\n finalize(() => this.state.modalBusy.set(false)),\r\n )\r\n .subscribe({\r\n next: res => {\r\n this.state.setResourceData(res.permissions || []);\r\n this.list.get();\r\n this.toasterService.success('AbpUi::DeletedSuccessfully');\r\n },\r\n });\r\n }\r\n });\r\n }\r\n\r\n savePermission() {\r\n const isEdit = this.state.isEditMode();\r\n const providerName = isEdit ? this.state.editProviderName() : this.state.selectedProviderName();\r\n const providerKey = isEdit ? this.state.editProviderKey() : this.state.selectedProviderKey();\r\n\r\n if (!isEdit && !this.state.canSave()) {\r\n this.toasterService.warn('AbpPermissionManagement::PleaseSelectProviderAndPermissions');\r\n return;\r\n }\r\n\r\n this.state.modalBusy.set(true);\r\n this.service\r\n .updateResource(this.resourceName(), this.resourceKey(), {\r\n providerName,\r\n providerKey,\r\n permissions: this.state.selectedPermissions(),\r\n })\r\n .pipe(\r\n switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),\r\n finalize(() => this.state.modalBusy.set(false)),\r\n )\r\n .subscribe({\r\n next: res => {\r\n this.state.setResourceData(res.permissions || []);\r\n this.list.get();\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n this.state.goToListMode();\r\n },\r\n });\r\n }\r\n}\r\n","<abp-modal\r\n [(visible)]=\"visible\"\r\n [busy]=\"state.modalBusy()\"\r\n [options]=\"{ size: 'xl', scrollable: false }\"\r\n>\r\n <ng-template #abpHeader>\r\n <h5 class=\"modal-title\">\r\n @switch (state.viewMode()) {\r\n @case (eResourcePermissionViewModes.Edit) {\r\n {{ 'AbpPermissionManagement::UpdatePermission' | abpLocalization }}\r\n }\r\n @case (eResourcePermissionViewModes.Add) {\r\n {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n }\r\n @default {\r\n {{ 'AbpPermissionManagement::ResourcePermissions' | abpLocalization }}\r\n @if (resourceDisplayName()) {\r\n - {{ resourceDisplayName() }}\r\n }\r\n }\r\n }\r\n </h5>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n @if (!state.hasResourcePermission() || !state.hasProviderKeyLookupService()) {\r\n <div class=\"alert alert-warning\" role=\"alert\">\r\n @if (!state.hasResourcePermission()) {\r\n {{ 'AbpPermissionManagement::NoResourcePermissionFound' | abpLocalization }}\r\n } @else {\r\n {{ 'AbpPermissionManagement::NoResourceProviderKeyLookupServiceFound' | abpLocalization }}\r\n }\r\n </div>\r\n } @else {\r\n @switch (state.viewMode()) {\r\n @case (eResourcePermissionViewModes.List) {\r\n <abp-resource-permission-list\r\n (addClicked)=\"onAddClicked()\"\r\n (editClicked)=\"onEditClicked($event)\"\r\n (deleteClicked)=\"onDeleteClicked($event)\"\r\n />\r\n }\r\n @case (eResourcePermissionViewModes.Add) {\r\n <abp-resource-permission-form mode=\"add\" [resourceName]=\"resourceName()\" />\r\n }\r\n @case (eResourcePermissionViewModes.Edit) {\r\n <abp-resource-permission-form mode=\"edit\" [resourceName]=\"resourceName()\" />\r\n }\r\n }\r\n }\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n @if (state.isListMode()) {\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpUi::Close' | abpLocalization }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"state.goToListMode()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"savePermission()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n }\r\n </ng-template>\r\n</abp-modal>\r\n","import { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [PermissionManagementComponent],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","finalize"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.permission-management",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.3.0-rc.2",
|
|
4
4
|
"homepage": "https://abp.io",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/abpframework/abp.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@abp/ng.theme.shared": "~10.
|
|
10
|
+
"@abp/ng.theme.shared": "~10.3.0-rc.2",
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"@angular/aria": "~21.
|
|
14
|
+
"@angular/aria": "~21.2.0"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|
|
@@ -45,5 +45,6 @@
|
|
|
45
45
|
"default": "./fesm2022/abp-ng.permission-management-proxy.mjs"
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
|
-
"sideEffects": false
|
|
48
|
+
"sideEffects": false,
|
|
49
|
+
"type": "module"
|
|
49
50
|
}
|