@abp/ng.permission-management 10.6.0-rc.1 → 10.6.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: "22.0.
|
|
63
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
63
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionsService, providedIn: 'root' }); }
|
|
64
64
|
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionsService, decorators: [{
|
|
66
66
|
type: Injectable,
|
|
67
67
|
args: [{
|
|
68
68
|
providedIn: 'root',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, DOCUMENT, input, output, signal, computed, ChangeDetectionStrategy, Component, Injectable, InjectionToken, DestroyRef, model,
|
|
2
|
+
import { inject, DOCUMENT, input, output, signal, computed, effect, untracked, ChangeDetectionStrategy, Component, Injectable, InjectionToken, DestroyRef, model, NgModule } from '@angular/core';
|
|
3
3
|
import { NgStyle } from '@angular/common';
|
|
4
4
|
import * as i1 from '@angular/forms';
|
|
5
5
|
import { FormsModule } from '@angular/forms';
|
|
@@ -14,70 +14,6 @@ import { EntityProp, ExtensionsService, mergeWithDefaultProps, ExtensibleTableCo
|
|
|
14
14
|
import { LookupSearchComponent } from '@abp/ng.components/lookup';
|
|
15
15
|
|
|
16
16
|
class PermissionManagementComponent {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.service = inject(PermissionsService);
|
|
19
|
-
this.configState = inject(ConfigStateService);
|
|
20
|
-
this.toasterService = inject(ToasterService);
|
|
21
|
-
this.document = inject(DOCUMENT);
|
|
22
|
-
this.providerNameInput = input('', { ...(ngDevMode ? { debugName: "providerNameInput" } : /* istanbul ignore next */ {}), alias: 'providerName' });
|
|
23
|
-
this.providerKeyInput = input('', { ...(ngDevMode ? { debugName: "providerKeyInput" } : /* istanbul ignore next */ {}), alias: 'providerKey' });
|
|
24
|
-
this.hideBadgesInput = input(false, { ...(ngDevMode ? { debugName: "hideBadgesInput" } : /* istanbul ignore next */ {}), alias: 'hideBadges' });
|
|
25
|
-
this.entityDisplayName = input(undefined, /* @ts-ignore */
|
|
26
|
-
...(ngDevMode ? [{ debugName: "entityDisplayName" }] : /* istanbul ignore next */ []));
|
|
27
|
-
this.visibleInput = input(false, { ...(ngDevMode ? { debugName: "visibleInput" } : /* istanbul ignore next */ {}), alias: 'visible' });
|
|
28
|
-
this.visibleChange = output();
|
|
29
|
-
this.modalVisible = signal(false, /* @ts-ignore */
|
|
30
|
-
...(ngDevMode ? [{ debugName: "modalVisible" }] : /* istanbul ignore next */ []));
|
|
31
|
-
this.modalBusy = signal(false, /* @ts-ignore */
|
|
32
|
-
...(ngDevMode ? [{ debugName: "modalBusy" }] : /* istanbul ignore next */ []));
|
|
33
|
-
this.filter = signal('', /* @ts-ignore */
|
|
34
|
-
...(ngDevMode ? [{ debugName: "filter" }] : /* istanbul ignore next */ []));
|
|
35
|
-
this.isOpening = false;
|
|
36
|
-
this.isClosingModal = false;
|
|
37
|
-
this.data = { groups: [], entityDisplayName: '' };
|
|
38
|
-
this.permissionsState = signal([], /* @ts-ignore */
|
|
39
|
-
...(ngDevMode ? [{ debugName: "permissionsState" }] : /* istanbul ignore next */ []));
|
|
40
|
-
this.selectedGroupState = signal(null, /* @ts-ignore */
|
|
41
|
-
...(ngDevMode ? [{ debugName: "selectedGroupState" }] : /* istanbul ignore next */ []));
|
|
42
|
-
this.permissionGroupSignal = signal([], /* @ts-ignore */
|
|
43
|
-
...(ngDevMode ? [{ debugName: "permissionGroupSignal" }] : /* istanbul ignore next */ []));
|
|
44
|
-
this.selectedGroupPermissions = computed(() => {
|
|
45
|
-
const group = this.selectedGroupState();
|
|
46
|
-
if (!group) {
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
49
|
-
const margin = `margin-${this.document.body?.dir === 'rtl' ? 'right' : 'left'}.px`;
|
|
50
|
-
const groupPermissions = this.permissionGroupSignal().find(item => item.name === group.name)?.permissions || [];
|
|
51
|
-
const permissions = this.permissionsState();
|
|
52
|
-
return groupPermissions.map(permission => ({
|
|
53
|
-
...permission,
|
|
54
|
-
style: { [margin]: findMargin(groupPermissions, permission) },
|
|
55
|
-
isGranted: (permissions.find(per => per.name === permission.name) || {}).isGranted,
|
|
56
|
-
}));
|
|
57
|
-
}, /* @ts-ignore */
|
|
58
|
-
...(ngDevMode ? [{ debugName: "selectedGroupPermissions" }] : /* istanbul ignore next */ []));
|
|
59
|
-
this.selectThisTabState = computed(() => getSelectAllCheckboxState(this.selectedGroupPermissions(), this.providerName), /* @ts-ignore */
|
|
60
|
-
...(ngDevMode ? [{ debugName: "selectThisTabState" }] : /* istanbul ignore next */ []));
|
|
61
|
-
this.selectAllTabState = computed(() => getSelectAllCheckboxState(this.permissionsState(), this.providerName), /* @ts-ignore */
|
|
62
|
-
...(ngDevMode ? [{ debugName: "selectAllTabState" }] : /* istanbul ignore next */ []));
|
|
63
|
-
// Disabled state is based on the API snapshot (not live edits) so select-all stays toggleable.
|
|
64
|
-
this.disableSelectAllTab = computed(() => isSelectAllDisabled(this.selectedGroupState()?.permissions, this.providerName), /* @ts-ignore */
|
|
65
|
-
...(ngDevMode ? [{ debugName: "disableSelectAllTab" }] : /* istanbul ignore next */ []));
|
|
66
|
-
this.disabledSelectAllInAllTabsState = signal(false, /* @ts-ignore */
|
|
67
|
-
...(ngDevMode ? [{ debugName: "disabledSelectAllInAllTabsState" }] : /* istanbul ignore next */ []));
|
|
68
|
-
this.disabledSelectAllInAllTabs = this.disabledSelectAllInAllTabsState.asReadonly();
|
|
69
|
-
this.permissionGroups = computed(() => {
|
|
70
|
-
const search = this.filter().toLowerCase().trim();
|
|
71
|
-
const groups = this.permissionGroupSignal();
|
|
72
|
-
if (!search) {
|
|
73
|
-
return groups;
|
|
74
|
-
}
|
|
75
|
-
const includesSearch = (text) => text.toLowerCase().includes(search);
|
|
76
|
-
return groups.filter(group => group.permissions.some(permission => includesSearch(permission.displayName) || includesSearch(group.displayName)));
|
|
77
|
-
}, /* @ts-ignore */
|
|
78
|
-
...(ngDevMode ? [{ debugName: "permissionGroups" }] : /* istanbul ignore next */ []));
|
|
79
|
-
this.trackByFn = (_, item) => item.name;
|
|
80
|
-
}
|
|
81
17
|
get providerName() {
|
|
82
18
|
return this._providerNameOverride ?? this.providerNameInput();
|
|
83
19
|
}
|
|
@@ -101,6 +37,9 @@ class PermissionManagementComponent {
|
|
|
101
37
|
return this.modalVisible();
|
|
102
38
|
}
|
|
103
39
|
set visible(value) {
|
|
40
|
+
this.setVisible(value);
|
|
41
|
+
}
|
|
42
|
+
setVisible(value) {
|
|
104
43
|
if (value && this.isClosingModal) {
|
|
105
44
|
return;
|
|
106
45
|
}
|
|
@@ -166,6 +105,79 @@ class PermissionManagementComponent {
|
|
|
166
105
|
this.filter.set('');
|
|
167
106
|
this.disabledSelectAllInAllTabsState.set(false);
|
|
168
107
|
}
|
|
108
|
+
// constructor() {
|
|
109
|
+
// effect(() => {
|
|
110
|
+
// this.setVisible(this.visibleInput());
|
|
111
|
+
// });
|
|
112
|
+
// }
|
|
113
|
+
constructor() {
|
|
114
|
+
this.service = inject(PermissionsService);
|
|
115
|
+
this.configState = inject(ConfigStateService);
|
|
116
|
+
this.toasterService = inject(ToasterService);
|
|
117
|
+
this.document = inject(DOCUMENT);
|
|
118
|
+
this.providerNameInput = input('', { ...(ngDevMode ? { debugName: "providerNameInput" } : /* istanbul ignore next */ {}), alias: 'providerName' });
|
|
119
|
+
this.providerKeyInput = input('', { ...(ngDevMode ? { debugName: "providerKeyInput" } : /* istanbul ignore next */ {}), alias: 'providerKey' });
|
|
120
|
+
this.hideBadgesInput = input(false, { ...(ngDevMode ? { debugName: "hideBadgesInput" } : /* istanbul ignore next */ {}), alias: 'hideBadges' });
|
|
121
|
+
this.entityDisplayName = input(undefined, /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "entityDisplayName" }] : /* istanbul ignore next */ []));
|
|
123
|
+
this.visibleInput = input(false, { ...(ngDevMode ? { debugName: "visibleInput" } : /* istanbul ignore next */ {}), alias: 'visible' });
|
|
124
|
+
this.visibleChange = output();
|
|
125
|
+
this.modalVisible = signal(false, /* @ts-ignore */
|
|
126
|
+
...(ngDevMode ? [{ debugName: "modalVisible" }] : /* istanbul ignore next */ []));
|
|
127
|
+
this.modalBusy = signal(false, /* @ts-ignore */
|
|
128
|
+
...(ngDevMode ? [{ debugName: "modalBusy" }] : /* istanbul ignore next */ []));
|
|
129
|
+
this.filter = signal('', /* @ts-ignore */
|
|
130
|
+
...(ngDevMode ? [{ debugName: "filter" }] : /* istanbul ignore next */ []));
|
|
131
|
+
this.isOpening = false;
|
|
132
|
+
this.isClosingModal = false;
|
|
133
|
+
this.data = { groups: [], entityDisplayName: '' };
|
|
134
|
+
this.permissionsState = signal([], /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "permissionsState" }] : /* istanbul ignore next */ []));
|
|
136
|
+
this.selectedGroupState = signal(null, /* @ts-ignore */
|
|
137
|
+
...(ngDevMode ? [{ debugName: "selectedGroupState" }] : /* istanbul ignore next */ []));
|
|
138
|
+
this.permissionGroupSignal = signal([], /* @ts-ignore */
|
|
139
|
+
...(ngDevMode ? [{ debugName: "permissionGroupSignal" }] : /* istanbul ignore next */ []));
|
|
140
|
+
this.selectedGroupPermissions = computed(() => {
|
|
141
|
+
const group = this.selectedGroupState();
|
|
142
|
+
if (!group) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
const margin = `margin-${this.document.body?.dir === 'rtl' ? 'right' : 'left'}.px`;
|
|
146
|
+
const groupPermissions = this.permissionGroupSignal().find(item => item.name === group.name)?.permissions || [];
|
|
147
|
+
const permissions = this.permissionsState();
|
|
148
|
+
return groupPermissions.map(permission => ({
|
|
149
|
+
...permission,
|
|
150
|
+
style: { [margin]: findMargin(groupPermissions, permission) },
|
|
151
|
+
isGranted: (permissions.find(per => per.name === permission.name) || {}).isGranted,
|
|
152
|
+
}));
|
|
153
|
+
}, /* @ts-ignore */
|
|
154
|
+
...(ngDevMode ? [{ debugName: "selectedGroupPermissions" }] : /* istanbul ignore next */ []));
|
|
155
|
+
this.selectThisTabState = computed(() => getSelectAllCheckboxState(this.selectedGroupPermissions(), this.providerName), /* @ts-ignore */
|
|
156
|
+
...(ngDevMode ? [{ debugName: "selectThisTabState" }] : /* istanbul ignore next */ []));
|
|
157
|
+
this.selectAllTabState = computed(() => getSelectAllCheckboxState(this.permissionsState(), this.providerName), /* @ts-ignore */
|
|
158
|
+
...(ngDevMode ? [{ debugName: "selectAllTabState" }] : /* istanbul ignore next */ []));
|
|
159
|
+
// Disabled state is based on the API snapshot (not live edits) so select-all stays toggleable.
|
|
160
|
+
this.disableSelectAllTab = computed(() => isSelectAllDisabled(this.selectedGroupState()?.permissions, this.providerName), /* @ts-ignore */
|
|
161
|
+
...(ngDevMode ? [{ debugName: "disableSelectAllTab" }] : /* istanbul ignore next */ []));
|
|
162
|
+
this.disabledSelectAllInAllTabsState = signal(false, /* @ts-ignore */
|
|
163
|
+
...(ngDevMode ? [{ debugName: "disabledSelectAllInAllTabsState" }] : /* istanbul ignore next */ []));
|
|
164
|
+
this.disabledSelectAllInAllTabs = this.disabledSelectAllInAllTabsState.asReadonly();
|
|
165
|
+
this.permissionGroups = computed(() => {
|
|
166
|
+
const search = this.filter().toLowerCase().trim();
|
|
167
|
+
const groups = this.permissionGroupSignal();
|
|
168
|
+
if (!search) {
|
|
169
|
+
return groups;
|
|
170
|
+
}
|
|
171
|
+
const includesSearch = (text) => text.toLowerCase().includes(search);
|
|
172
|
+
return groups.filter(group => group.permissions.some(permission => includesSearch(permission.displayName) || includesSearch(group.displayName)));
|
|
173
|
+
}, /* @ts-ignore */
|
|
174
|
+
...(ngDevMode ? [{ debugName: "permissionGroups" }] : /* istanbul ignore next */ []));
|
|
175
|
+
this.trackByFn = (_, item) => item.name;
|
|
176
|
+
effect(() => {
|
|
177
|
+
const visible = this.visibleInput();
|
|
178
|
+
untracked(() => this.setVisible(visible));
|
|
179
|
+
});
|
|
180
|
+
}
|
|
169
181
|
getChecked(name) {
|
|
170
182
|
return (this.permissionsState().find(per => per.name === name) || { isGranted: false })
|
|
171
183
|
.isGranted;
|
|
@@ -349,10 +361,10 @@ class PermissionManagementComponent {
|
|
|
349
361
|
return currentUser.id === providerKey;
|
|
350
362
|
return false;
|
|
351
363
|
}
|
|
352
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
353
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", 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" }, exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal\r\n [(visible)]=\"modalVisible\"\r\n (visibleChange)=\"onModalVisibleChange($event)\"\r\n (disappear)=\"onModalDisappear()\"\r\n [busy]=\"modalBusy()\"\r\n [suppressUnsavedChangesWarning]=\"true\"\r\n [options]=\"{ size: 'lg', scrollable: false }\"\r\n>\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)=\"onFilterChange($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 [checked]=\"selectAllTabState().checked\"\r\n [indeterminate]=\"selectAllTabState().indeterminate\"\r\n (change)=\"onSelectAllChange($event)\"\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 (selectedGroup?.name === group.name && 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 [checked]=\"selectThisTabState().checked\"\r\n [indeterminate]=\"selectThisTabState().indeterminate\"\r\n [disabled]=\"disableSelectAllTab()\"\r\n (change)=\"onSelectThisTabChange($event)\"\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)\"\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\" buttonType=\"button\" (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]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { 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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
364
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
365
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", 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" }, exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal\r\n [(visible)]=\"modalVisible\"\r\n (visibleChange)=\"onModalVisibleChange($event)\"\r\n (disappear)=\"onModalDisappear()\"\r\n [busy]=\"modalBusy()\"\r\n [suppressUnsavedChangesWarning]=\"true\"\r\n [options]=\"{ size: 'lg', scrollable: false }\"\r\n>\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)=\"onFilterChange($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 [checked]=\"selectAllTabState().checked\"\r\n [indeterminate]=\"selectAllTabState().indeterminate\"\r\n (change)=\"onSelectAllChange($event)\"\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 (selectedGroup?.name === group.name && 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 [checked]=\"selectThisTabState().checked\"\r\n [indeterminate]=\"selectThisTabState().indeterminate\"\r\n [disabled]=\"disableSelectAllTab()\"\r\n (change)=\"onSelectThisTabChange($event)\"\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)\"\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\" buttonType=\"button\" (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]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { 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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
354
366
|
}
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
367
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionManagementComponent, decorators: [{
|
|
356
368
|
type: Component,
|
|
357
369
|
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', imports: [
|
|
358
370
|
FormsModule,
|
|
@@ -367,7 +379,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
367
379
|
TabPanel,
|
|
368
380
|
TabContent,
|
|
369
381
|
], template: "<abp-modal\r\n [(visible)]=\"modalVisible\"\r\n (visibleChange)=\"onModalVisibleChange($event)\"\r\n (disappear)=\"onModalDisappear()\"\r\n [busy]=\"modalBusy()\"\r\n [suppressUnsavedChangesWarning]=\"true\"\r\n [options]=\"{ size: 'lg', scrollable: false }\"\r\n>\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)=\"onFilterChange($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 [checked]=\"selectAllTabState().checked\"\r\n [indeterminate]=\"selectAllTabState().indeterminate\"\r\n (change)=\"onSelectAllChange($event)\"\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 (selectedGroup?.name === group.name && 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 [checked]=\"selectThisTabState().checked\"\r\n [indeterminate]=\"selectThisTabState().indeterminate\"\r\n [disabled]=\"disableSelectAllTab()\"\r\n (change)=\"onSelectThisTabChange($event)\"\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)\"\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\" buttonType=\"button\" (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"] }]
|
|
370
|
-
}], propDecorators: { providerNameInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerName", required: false }] }], providerKeyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerKey", required: false }] }], hideBadgesInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideBadges", required: false }] }], entityDisplayName: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityDisplayName", required: false }] }], visibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
382
|
+
}], ctorParameters: () => [], propDecorators: { providerNameInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerName", required: false }] }], providerKeyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerKey", required: false }] }], hideBadgesInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideBadges", required: false }] }], entityDisplayName: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityDisplayName", required: false }] }], visibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
371
383
|
function isSelectAllDisabled(permissions, providerName) {
|
|
372
384
|
if (!permissions?.length) {
|
|
373
385
|
return false;
|
|
@@ -576,10 +588,10 @@ class ResourcePermissionStateService {
|
|
|
576
588
|
this.permissionDefinitions.set(permissions);
|
|
577
589
|
this.hasResourcePermission.set(permissions.length > 0);
|
|
578
590
|
}
|
|
579
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
580
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
591
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
592
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionStateService }); }
|
|
581
593
|
}
|
|
582
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
594
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionStateService, decorators: [{
|
|
583
595
|
type: Injectable
|
|
584
596
|
}] });
|
|
585
597
|
|
|
@@ -633,8 +645,8 @@ class ResourcePermissionListComponent {
|
|
|
633
645
|
this.deleteClicked = output();
|
|
634
646
|
configureResourcePermissionExtensions();
|
|
635
647
|
}
|
|
636
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
637
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
648
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
649
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ResourcePermissionListComponent, isStandalone: true, selector: "abp-resource-permission-list", outputs: { addClicked: "addClicked", editClicked: "editClicked", deleteClicked: "deleteClicked" }, providers: [
|
|
638
650
|
ListService,
|
|
639
651
|
{
|
|
640
652
|
provide: EXTENSIONS_IDENTIFIER,
|
|
@@ -642,7 +654,7 @@ class ResourcePermissionListComponent {
|
|
|
642
654
|
},
|
|
643
655
|
], 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 }); }
|
|
644
656
|
}
|
|
645
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
657
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionListComponent, decorators: [{
|
|
646
658
|
type: Component,
|
|
647
659
|
args: [{ selector: 'abp-resource-permission-list', providers: [
|
|
648
660
|
ListService,
|
|
@@ -686,10 +698,10 @@ class ProviderKeySearchComponent {
|
|
|
686
698
|
providerDisplayName: k.providerDisplayName || undefined,
|
|
687
699
|
}))), takeUntilDestroyed(this.destroyRef));
|
|
688
700
|
}
|
|
689
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
690
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
701
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ProviderKeySearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
702
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", 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 }); }
|
|
691
703
|
}
|
|
692
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
704
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ProviderKeySearchComponent, decorators: [{
|
|
693
705
|
type: Component,
|
|
694
706
|
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" }]
|
|
695
707
|
}], propDecorators: { resourceName: [{ type: i0.Input, args: [{ isSignal: true, alias: "resourceName", required: true }] }] } });
|
|
@@ -706,10 +718,10 @@ class PermissionCheckboxListComponent {
|
|
|
706
718
|
this.showTitle = input(true, /* @ts-ignore */
|
|
707
719
|
...(ngDevMode ? [{ debugName: "showTitle" }] : /* istanbul ignore next */ []));
|
|
708
720
|
}
|
|
709
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
710
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
721
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionCheckboxListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
722
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", 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 }); }
|
|
711
723
|
}
|
|
712
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
724
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionCheckboxListComponent, decorators: [{
|
|
713
725
|
type: Component,
|
|
714
726
|
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"] }]
|
|
715
727
|
}], 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 }] }] } });
|
|
@@ -725,10 +737,10 @@ class ResourcePermissionFormComponent {
|
|
|
725
737
|
this.save = output();
|
|
726
738
|
this.cancel = output();
|
|
727
739
|
}
|
|
728
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
729
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
740
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
741
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", 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 }); }
|
|
730
742
|
}
|
|
731
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
743
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionFormComponent, decorators: [{
|
|
732
744
|
type: Component,
|
|
733
745
|
args: [{ selector: 'abp-resource-permission-form', imports: [
|
|
734
746
|
FormsModule,
|
|
@@ -878,10 +890,10 @@ class ResourcePermissionManagementComponent {
|
|
|
878
890
|
},
|
|
879
891
|
});
|
|
880
892
|
}
|
|
881
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
882
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
893
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
894
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", 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]=\"eResourcePermissionViewModes.Add\" [resourceName]=\"resourceName()\" />\r\n }\r\n @case (eResourcePermissionViewModes.Edit) {\r\n <abp-resource-permission-form [mode]=\"eResourcePermissionViewModes.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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
883
895
|
}
|
|
884
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
896
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ResourcePermissionManagementComponent, decorators: [{
|
|
885
897
|
type: Component,
|
|
886
898
|
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'abp-resource-permission-management', exportAs: 'abpResourcePermissionManagement', providers: [ResourcePermissionStateService, ListService], imports: [
|
|
887
899
|
ModalComponent,
|
|
@@ -894,11 +906,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
894
906
|
}], 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"] }] } });
|
|
895
907
|
|
|
896
908
|
class PermissionManagementModule {
|
|
897
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
898
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.
|
|
899
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.
|
|
909
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
910
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent], exports: [PermissionManagementComponent] }); }
|
|
911
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent] }); }
|
|
900
912
|
}
|
|
901
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
913
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PermissionManagementModule, decorators: [{
|
|
902
914
|
type: NgModule,
|
|
903
915
|
args: [{
|
|
904
916
|
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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DOCUMENT,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n TrackByFunction,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Tabs, TabList, Tab, TabPanel, TabContent } from '@angular/aria/tabs';\r\nimport { of } from 'rxjs';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\n\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\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: Record<string, number>;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\ntype SelectAllCheckboxState = {\r\n checked: boolean;\r\n indeterminate: boolean;\r\n};\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\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 document = inject(DOCUMENT);\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 readonly visibleChange = output<boolean>();\r\n\r\n protected readonly modalVisible = signal(false);\r\n protected readonly modalBusy = signal(false);\r\n protected readonly filter = signal<string>('');\r\n\r\n private isOpening = false;\r\n private isClosingModal = 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 data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n private readonly permissionsState = signal<PermissionWithGroupName[]>([]);\r\n private readonly selectedGroupState = signal<PermissionGroupDto | null>(null);\r\n private readonly permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n protected readonly selectedGroupPermissions = computed(() => {\r\n const group = this.selectedGroupState();\r\n if (!group) {\r\n return [] as PermissionWithStyle[];\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 groupPermissions =\r\n this.permissionGroupSignal().find(item => item.name === group.name)?.permissions || [];\r\n const permissions = this.permissionsState();\r\n\r\n return groupPermissions.map(permission => ({\r\n ...permission,\r\n style: { [margin]: findMargin(groupPermissions, permission) },\r\n isGranted: (permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n })) as PermissionWithStyle[];\r\n });\r\n\r\n protected readonly selectThisTabState = computed(() =>\r\n getSelectAllCheckboxState(this.selectedGroupPermissions(), this.providerName),\r\n );\r\n\r\n protected readonly selectAllTabState = computed(() =>\r\n getSelectAllCheckboxState(this.permissionsState(), this.providerName),\r\n );\r\n\r\n // Disabled state is based on the API snapshot (not live edits) so select-all stays toggleable.\r\n protected readonly disableSelectAllTab = computed(() =>\r\n isSelectAllDisabled(this.selectedGroupState()?.permissions, this.providerName),\r\n );\r\n\r\n private readonly disabledSelectAllInAllTabsState = signal(false);\r\n protected readonly disabledSelectAllInAllTabs = this.disabledSelectAllInAllTabsState.asReadonly();\r\n\r\n permissionGroups = computed(() => {\r\n const search = this.filter().toLowerCase().trim();\r\n const groups = this.permissionGroupSignal();\r\n\r\n if (!search) {\r\n return groups;\r\n }\r\n\r\n const includesSearch = (text: string) => text.toLowerCase().includes(search);\r\n return 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\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n // Backward-compatible getters/setters for ReplaceableTemplateDirective.\r\n get visible(): boolean {\r\n return this.modalVisible();\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value && this.isClosingModal) {\r\n return;\r\n }\r\n\r\n if (value === this.modalVisible()) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this.showModal();\r\n } else {\r\n this.hideModal();\r\n }\r\n }\r\n\r\n get permissions(): PermissionWithGroupName[] {\r\n return this.permissionsState();\r\n }\r\n\r\n set permissions(value: PermissionWithGroupName[]) {\r\n this.permissionsState.set(value);\r\n }\r\n\r\n get selectedGroup(): PermissionGroupDto | null | undefined {\r\n return this.selectedGroupState();\r\n }\r\n\r\n get selectThisTab(): boolean {\r\n return this.selectThisTabState().checked;\r\n }\r\n\r\n get selectAllTab(): boolean {\r\n return this.selectAllTabState().checked;\r\n }\r\n\r\n onModalVisibleChange(value: boolean) {\r\n this.visibleChange.emit(value);\r\n }\r\n\r\n onModalDisappear() {\r\n setTimeout(() => {\r\n if (!this.modalVisible()) {\r\n this.resetModalState();\r\n }\r\n this.isClosingModal = false;\r\n });\r\n }\r\n\r\n private showModal() {\r\n if (this.isOpening || this.modalVisible()) {\r\n return;\r\n }\r\n\r\n this.isClosingModal = false;\r\n this.isOpening = true;\r\n this.openModal()\r\n .pipe(finalize(() => (this.isOpening = false)))\r\n .subscribe(() => {\r\n this.modalVisible.set(true);\r\n this.visibleChange.emit(true);\r\n });\r\n }\r\n\r\n private hideModal() {\r\n if (!this.modalVisible()) {\r\n return;\r\n }\r\n\r\n this.isClosingModal = true;\r\n this.visibleChange.emit(false);\r\n this.modalVisible.set(false);\r\n }\r\n\r\n private resetModalState() {\r\n this.setSelectedGroup(null);\r\n this.filter.set('');\r\n this.disabledSelectAllInAllTabsState.set(false);\r\n }\r\n\r\n getChecked(name: string) {\r\n return (this.permissionsState().find(per => per.name === name) || { isGranted: false })\r\n .isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto | null) {\r\n this.selectedGroupState.set(group);\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 setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissionsState.update(permissions =>\r\n 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\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissionsState(), clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissionsState.update(permissions =>\r\n 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 }\r\n return;\r\n }\r\n\r\n this.permissionsState.update(permissions =>\r\n permissions.map(per => {\r\n const parents = findParentPermissions(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\r\n onSelectThisTabChange(event: Event) {\r\n if (this.disableSelectAllTab()) {\r\n return;\r\n }\r\n\r\n const state = this.selectThisTabState();\r\n const checked = !state.checked || state.indeterminate;\r\n\r\n this.permissionsState.update(permissions => {\r\n let updatedPermissions = [...permissions];\r\n\r\n this.selectedGroupPermissions().forEach(permission => {\r\n if (this.isGrantedByOtherProviderName(permission.grantedProviders)) {\r\n return;\r\n }\r\n\r\n const index = updatedPermissions.findIndex(per => per.name === permission.name);\r\n if (index < 0) {\r\n return;\r\n }\r\n\r\n updatedPermissions = [\r\n ...updatedPermissions.slice(0, index),\r\n { ...updatedPermissions[index], isGranted: checked },\r\n ...updatedPermissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n return updatedPermissions;\r\n });\r\n }\r\n\r\n onSelectAllChange(event: Event) {\r\n if (this.disabledSelectAllInAllTabs()) {\r\n return;\r\n }\r\n\r\n const state = this.selectAllTabState();\r\n const checked = !state.checked || state.indeterminate;\r\n\r\n if (this.filter()) {\r\n this.onFilterChange('');\r\n }\r\n\r\n this.permissionsState.update(permissions =>\r\n permissions.map(permission => ({\r\n ...permission,\r\n isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || checked,\r\n })),\r\n );\r\n }\r\n\r\n onFilterChange(value: string) {\r\n this.filter.set(value);\r\n this.syncSelectedGroupWithFilter();\r\n }\r\n\r\n private syncSelectedGroupWithFilter() {\r\n const groups = this.permissionGroups();\r\n\r\n if (!groups.length) {\r\n this.setSelectedGroup(null);\r\n return;\r\n }\r\n\r\n if (!groups.some(group => group.name === this.selectedGroupState()?.name)) {\r\n this.onChangeGroup(groups[0]);\r\n }\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.setSelectedGroup(group);\r\n }\r\n\r\n submit() {\r\n if (this.modalBusy()) {\r\n return;\r\n }\r\n\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissionsState()\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.hideModal();\r\n return;\r\n }\r\n\r\n this.modalBusy.set(true);\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n tap(() => this.hideModal()),\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => this.modalBusy.set(false)),\r\n )\r\n .subscribe(() => {\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 const permissions = getPermissions(groups);\r\n this.permissionsState.set(permissions);\r\n this.disabledSelectAllInAllTabsState.set(isSelectAllDisabled(permissions, providerName));\r\n this.setSelectedGroup(groups[0] ?? null);\r\n }),\r\n );\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissionsState().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 isSelectAllDisabled(\r\n permissions: PermissionGrantInfoDto[] | undefined,\r\n providerName: string,\r\n): boolean {\r\n if (!permissions?.length) {\r\n return false;\r\n }\r\n\r\n return permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== providerName),\r\n );\r\n}\r\n\r\nfunction getSelectAllCheckboxState(\r\n permissions: PermissionGrantInfoDto[],\r\n providerName: string,\r\n): SelectAllCheckboxState {\r\n const selectablePermissions = permissions.filter(permission =>\r\n (permission.grantedProviders ?? []).every(p => p.providerName === providerName),\r\n );\r\n const selectedPermissions = selectablePermissions.filter(permission => permission.isGranted);\r\n\r\n if (!selectablePermissions.length || selectedPermissions.length === 0) {\r\n return { checked: false, indeterminate: false };\r\n }\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n return { checked: true, indeterminate: false };\r\n }\r\n\r\n return { checked: false, indeterminate: true };\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\r\n [(visible)]=\"modalVisible\"\r\n (visibleChange)=\"onModalVisibleChange($event)\"\r\n (disappear)=\"onModalDisappear()\"\r\n [busy]=\"modalBusy()\"\r\n [suppressUnsavedChangesWarning]=\"true\"\r\n [options]=\"{ size: 'lg', scrollable: false }\"\r\n>\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)=\"onFilterChange($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 [checked]=\"selectAllTabState().checked\"\r\n [indeterminate]=\"selectAllTabState().indeterminate\"\r\n (change)=\"onSelectAllChange($event)\"\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 (selectedGroup?.name === group.name && 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 [checked]=\"selectThisTabState().checked\"\r\n [indeterminate]=\"selectThisTabState().indeterminate\"\r\n [disabled]=\"disableSelectAllTab()\"\r\n (change)=\"onSelectThisTabChange($event)\"\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)\"\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\" buttonType=\"button\" (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 {\r\n Component,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\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 changeDetection: ChangeDetectionStrategy.OnPush,\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 {\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 protected 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 private readonly listData = toSignal(\r\n this.list.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 { initialValue: { items: [] as ResourcePermissionGrantInfoDto[], totalCount: 0 } },\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const result = this.listData();\r\n untracked(() => {\r\n this.state.resourcePermissions.set(result.items);\r\n this.state.totalCount.set(result.totalCount);\r\n });\r\n });\r\n\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 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]=\"eResourcePermissionViewModes.Add\" [resourceName]=\"resourceName()\" />\r\n }\r\n @case (eResourcePermissionViewModes.Edit) {\r\n <abp-resource-permission-form [mode]=\"eResourcePermissionViewModes.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 {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DOCUMENT,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n TrackByFunction,\r\n untracked,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Tabs, TabList, Tab, TabPanel, TabContent } from '@angular/aria/tabs';\r\nimport { of } from 'rxjs';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\n\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\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: Record<string, number>;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\ntype SelectAllCheckboxState = {\r\n checked: boolean;\r\n indeterminate: boolean;\r\n};\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\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 document = inject(DOCUMENT);\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 readonly visibleChange = output<boolean>();\r\n\r\n protected readonly modalVisible = signal(false);\r\n protected readonly modalBusy = signal(false);\r\n protected readonly filter = signal<string>('');\r\n\r\n private isOpening = false;\r\n private isClosingModal = 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 data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n private readonly permissionsState = signal<PermissionWithGroupName[]>([]);\r\n private readonly selectedGroupState = signal<PermissionGroupDto | null>(null);\r\n private readonly permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n protected readonly selectedGroupPermissions = computed(() => {\r\n const group = this.selectedGroupState();\r\n if (!group) {\r\n return [] as PermissionWithStyle[];\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 groupPermissions =\r\n this.permissionGroupSignal().find(item => item.name === group.name)?.permissions || [];\r\n const permissions = this.permissionsState();\r\n\r\n return groupPermissions.map(permission => ({\r\n ...permission,\r\n style: { [margin]: findMargin(groupPermissions, permission) },\r\n isGranted: (permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n })) as PermissionWithStyle[];\r\n });\r\n\r\n protected readonly selectThisTabState = computed(() =>\r\n getSelectAllCheckboxState(this.selectedGroupPermissions(), this.providerName),\r\n );\r\n\r\n protected readonly selectAllTabState = computed(() =>\r\n getSelectAllCheckboxState(this.permissionsState(), this.providerName),\r\n );\r\n\r\n // Disabled state is based on the API snapshot (not live edits) so select-all stays toggleable.\r\n protected readonly disableSelectAllTab = computed(() =>\r\n isSelectAllDisabled(this.selectedGroupState()?.permissions, this.providerName),\r\n );\r\n\r\n private readonly disabledSelectAllInAllTabsState = signal(false);\r\n protected readonly disabledSelectAllInAllTabs = this.disabledSelectAllInAllTabsState.asReadonly();\r\n\r\n permissionGroups = computed(() => {\r\n const search = this.filter().toLowerCase().trim();\r\n const groups = this.permissionGroupSignal();\r\n\r\n if (!search) {\r\n return groups;\r\n }\r\n\r\n const includesSearch = (text: string) => text.toLowerCase().includes(search);\r\n return 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\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n // Backward-compatible getters/setters for ReplaceableTemplateDirective.\r\n get visible(): boolean {\r\n return this.modalVisible();\r\n }\r\n\r\n set visible(value: boolean) {\r\n this.setVisible(value);\r\n }\r\n\r\n private setVisible(value: boolean) {\r\n if (value && this.isClosingModal) {\r\n return;\r\n }\r\n\r\n if (value === this.modalVisible()) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this.showModal();\r\n } else {\r\n this.hideModal();\r\n }\r\n }\r\n\r\n get permissions(): PermissionWithGroupName[] {\r\n return this.permissionsState();\r\n }\r\n\r\n set permissions(value: PermissionWithGroupName[]) {\r\n this.permissionsState.set(value);\r\n }\r\n\r\n get selectedGroup(): PermissionGroupDto | null | undefined {\r\n return this.selectedGroupState();\r\n }\r\n\r\n get selectThisTab(): boolean {\r\n return this.selectThisTabState().checked;\r\n }\r\n\r\n get selectAllTab(): boolean {\r\n return this.selectAllTabState().checked;\r\n }\r\n\r\n onModalVisibleChange(value: boolean) {\r\n this.visibleChange.emit(value);\r\n }\r\n\r\n onModalDisappear() {\r\n setTimeout(() => {\r\n if (!this.modalVisible()) {\r\n this.resetModalState();\r\n }\r\n this.isClosingModal = false;\r\n });\r\n }\r\n\r\n private showModal() {\r\n if (this.isOpening || this.modalVisible()) {\r\n return;\r\n }\r\n\r\n this.isClosingModal = false;\r\n this.isOpening = true;\r\n this.openModal()\r\n .pipe(finalize(() => (this.isOpening = false)))\r\n .subscribe(() => {\r\n this.modalVisible.set(true);\r\n this.visibleChange.emit(true);\r\n });\r\n }\r\n\r\n private hideModal() {\r\n if (!this.modalVisible()) {\r\n return;\r\n }\r\n\r\n this.isClosingModal = true;\r\n this.visibleChange.emit(false);\r\n this.modalVisible.set(false);\r\n }\r\n\r\n private resetModalState() {\r\n this.setSelectedGroup(null);\r\n this.filter.set('');\r\n this.disabledSelectAllInAllTabsState.set(false);\r\n }\r\n\r\n // constructor() {\r\n // effect(() => {\r\n // this.setVisible(this.visibleInput());\r\n // });\r\n // }\r\n\r\n constructor() {\r\n effect(() => {\r\n const visible = this.visibleInput();\r\n untracked(() => this.setVisible(visible));\r\n });\r\n }\r\n\r\n getChecked(name: string) {\r\n return (this.permissionsState().find(per => per.name === name) || { isGranted: false })\r\n .isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto | null) {\r\n this.selectedGroupState.set(group);\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 setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissionsState.update(permissions =>\r\n 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\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissionsState(), clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissionsState.update(permissions =>\r\n 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 }\r\n return;\r\n }\r\n\r\n this.permissionsState.update(permissions =>\r\n permissions.map(per => {\r\n const parents = findParentPermissions(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\r\n onSelectThisTabChange(event: Event) {\r\n if (this.disableSelectAllTab()) {\r\n return;\r\n }\r\n\r\n const state = this.selectThisTabState();\r\n const checked = !state.checked || state.indeterminate;\r\n\r\n this.permissionsState.update(permissions => {\r\n let updatedPermissions = [...permissions];\r\n\r\n this.selectedGroupPermissions().forEach(permission => {\r\n if (this.isGrantedByOtherProviderName(permission.grantedProviders)) {\r\n return;\r\n }\r\n\r\n const index = updatedPermissions.findIndex(per => per.name === permission.name);\r\n if (index < 0) {\r\n return;\r\n }\r\n\r\n updatedPermissions = [\r\n ...updatedPermissions.slice(0, index),\r\n { ...updatedPermissions[index], isGranted: checked },\r\n ...updatedPermissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n return updatedPermissions;\r\n });\r\n }\r\n\r\n onSelectAllChange(event: Event) {\r\n if (this.disabledSelectAllInAllTabs()) {\r\n return;\r\n }\r\n\r\n const state = this.selectAllTabState();\r\n const checked = !state.checked || state.indeterminate;\r\n\r\n if (this.filter()) {\r\n this.onFilterChange('');\r\n }\r\n\r\n this.permissionsState.update(permissions =>\r\n permissions.map(permission => ({\r\n ...permission,\r\n isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || checked,\r\n })),\r\n );\r\n }\r\n\r\n onFilterChange(value: string) {\r\n this.filter.set(value);\r\n this.syncSelectedGroupWithFilter();\r\n }\r\n\r\n private syncSelectedGroupWithFilter() {\r\n const groups = this.permissionGroups();\r\n\r\n if (!groups.length) {\r\n this.setSelectedGroup(null);\r\n return;\r\n }\r\n\r\n if (!groups.some(group => group.name === this.selectedGroupState()?.name)) {\r\n this.onChangeGroup(groups[0]);\r\n }\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.setSelectedGroup(group);\r\n }\r\n\r\n submit() {\r\n if (this.modalBusy()) {\r\n return;\r\n }\r\n\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissionsState()\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.hideModal();\r\n return;\r\n }\r\n\r\n this.modalBusy.set(true);\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n tap(() => this.hideModal()),\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => this.modalBusy.set(false)),\r\n )\r\n .subscribe(() => {\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 const permissions = getPermissions(groups);\r\n this.permissionsState.set(permissions);\r\n this.disabledSelectAllInAllTabsState.set(isSelectAllDisabled(permissions, providerName));\r\n this.setSelectedGroup(groups[0] ?? null);\r\n }),\r\n );\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissionsState().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 isSelectAllDisabled(\r\n permissions: PermissionGrantInfoDto[] | undefined,\r\n providerName: string,\r\n): boolean {\r\n if (!permissions?.length) {\r\n return false;\r\n }\r\n\r\n return permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== providerName),\r\n );\r\n}\r\n\r\nfunction getSelectAllCheckboxState(\r\n permissions: PermissionGrantInfoDto[],\r\n providerName: string,\r\n): SelectAllCheckboxState {\r\n const selectablePermissions = permissions.filter(permission =>\r\n (permission.grantedProviders ?? []).every(p => p.providerName === providerName),\r\n );\r\n const selectedPermissions = selectablePermissions.filter(permission => permission.isGranted);\r\n\r\n if (!selectablePermissions.length || selectedPermissions.length === 0) {\r\n return { checked: false, indeterminate: false };\r\n }\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n return { checked: true, indeterminate: false };\r\n }\r\n\r\n return { checked: false, indeterminate: true };\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\r\n [(visible)]=\"modalVisible\"\r\n (visibleChange)=\"onModalVisibleChange($event)\"\r\n (disappear)=\"onModalDisappear()\"\r\n [busy]=\"modalBusy()\"\r\n [suppressUnsavedChangesWarning]=\"true\"\r\n [options]=\"{ size: 'lg', scrollable: false }\"\r\n>\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)=\"onFilterChange($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 [checked]=\"selectAllTabState().checked\"\r\n [indeterminate]=\"selectAllTabState().indeterminate\"\r\n (change)=\"onSelectAllChange($event)\"\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 (selectedGroup?.name === group.name && 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 [checked]=\"selectThisTabState().checked\"\r\n [indeterminate]=\"selectThisTabState().indeterminate\"\r\n [disabled]=\"disableSelectAllTab()\"\r\n (change)=\"onSelectThisTabChange($event)\"\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)\"\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\" buttonType=\"button\" (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 {\r\n Component,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\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 changeDetection: ChangeDetectionStrategy.OnPush,\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 {\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 protected 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 private readonly listData = toSignal(\r\n this.list.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 { initialValue: { items: [] as ResourcePermissionGrantInfoDto[], totalCount: 0 } },\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const result = this.listData();\r\n untracked(() => {\r\n this.state.resourcePermissions.set(result.items);\r\n this.state.totalCount.set(result.totalCount);\r\n });\r\n });\r\n\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 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]=\"eResourcePermissionViewModes.Add\" [resourceName]=\"resourceName()\" />\r\n }\r\n @case (eResourcePermissionViewModes.Edit) {\r\n <abp-resource-permission-form [mode]=\"eResourcePermissionViewModes.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,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.permission-management",
|
|
3
|
-
"version": "10.6.0-rc.
|
|
3
|
+
"version": "10.6.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.6.0-rc.
|
|
10
|
+
"@abp/ng.theme.shared": "~10.6.0-rc.2",
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
@@ -56,6 +56,7 @@ declare class PermissionManagementComponent {
|
|
|
56
56
|
trackByFn: TrackByFunction<PermissionGroupDto>;
|
|
57
57
|
get visible(): boolean;
|
|
58
58
|
set visible(value: boolean);
|
|
59
|
+
private setVisible;
|
|
59
60
|
get permissions(): PermissionWithGroupName[];
|
|
60
61
|
set permissions(value: PermissionWithGroupName[]);
|
|
61
62
|
get selectedGroup(): PermissionGroupDto | null | undefined;
|
|
@@ -66,6 +67,7 @@ declare class PermissionManagementComponent {
|
|
|
66
67
|
private showModal;
|
|
67
68
|
private hideModal;
|
|
68
69
|
private resetModalState;
|
|
70
|
+
constructor();
|
|
69
71
|
getChecked(name: string): boolean;
|
|
70
72
|
setSelectedGroup(group: PermissionGroupDto | null): void;
|
|
71
73
|
isGrantedByOtherProviderName(grantedProviders?: ProviderInfoDto[]): boolean;
|