1 <eg-staff-banner bannerText="Permission Group Configuration" i18n-bannerText>
4 <eg-string #createString i18n-text text="Permission Group Mapping Added">
6 <eg-string #successString i18n-text text="Permission Group Update Succeeded">
8 <eg-string #errorString i18n-text text="Permission Group Update Failed">
11 <eg-string #createMapString i18n-text text="Permission Group Mapping Added">
13 <eg-string #successMapString i18n-text text="Permission Group Mapping Update Succeeded">
15 <eg-string #errorMapString i18n-text text="Permission Group Mapping Update Failed">
18 <eg-fm-record-editor #editDialog idlClass="pgt" readonlyFields="parent"
19 [fieldOptions]="fmEditorOptions()">
20 </eg-fm-record-editor>
22 <eg-confirm-dialog #delConfirm
23 i18n-dialogTitle i18n-dialogBody
24 dialogTitle="Confirm Delete"
25 dialogBody="Delete Permission Group {{selected ? selected.label : ''}}?">
29 <eg-perm-group-map-dialog #addMappingDialog
30 [permGroup]="selected ? selected.callerData : null"
31 [orgDepths]="orgDepths"
32 [permMaps]="groupPermMaps()" [permissions]="permissions">
33 </eg-perm-group-map-dialog>
36 <div class="col-lg-3">
37 <h3 i18n>Permission Groups</h3>
38 <eg-tree [tree]="tree" (nodeClicked)="nodeClicked($event)"></eg-tree>
40 <div class="col-lg-9">
41 <h3 i18n class="mb-3">Selected Permission Group</h3>
42 <ng-container *ngIf="!selected">
43 <div class="alert alert-info fst-italic" i18n>
44 Select a permission group from the tree on the left.
46 <ng-container *ngIf="loading">
48 <div class="col-lg-6">
49 <eg-progress-inline #loadProgress></eg-progress-inline>
54 <div *ngIf="selected" class="common-form striped-even">
55 <ul ngbNav #PermTabs="ngbNav" [(activeId)]="permTab" (navChange)="onNavChange($event)"
56 [keyboard]="true" [roles]="false" role="tablist" class="nav-tabs">
57 <li role="presentation" [ngbNavItem]="'detail'">
58 <a i18n ngbNavLink role="tab">Group Details</a>
59 <ng-template ngbNavContent>
61 <div class="col-lg-3">
62 <label class="form-label" i18n>Actions for Selected: </label>
64 <div class="col-lg-9">
65 <button type="button" class="btn btn-info me-2" (click)="edit()" i18n>Edit</button>
66 <button type="button" class="btn btn-info me-2" (click)="addChild()" i18n>Add Child</button>
67 <button type="button" class="btn btn-destroy me-2" (click)="remove()" i18n>Delete</button>
71 <div class="col-lg-4">
72 <label class="form-label" i18n>Name: </label>
74 <div class="col-lg-8 fw-bold">
75 {{selected.callerData.name()}}
79 <div class="col-lg-4">
80 <label class="form-label" i18n>Description: </label>
82 <div class="col-lg-8 fw-bold">
83 {{selected.callerData.description()}}
87 <div class="col-lg-4">
88 <label class="form-label" i18n>User Expiration Interval: </label>
90 <div class="col-lg-8 fw-bold">
91 {{selected.callerData.perm_interval()}}
95 <div class="col-lg-4">
96 <label class="form-label" i18n>Application Permission: </label>
98 <div class="col-lg-8 fw-bold">
99 {{selected.callerData.application_perm()}}
103 <div class="col-lg-4">
104 <label class="form-label" i18n>Hold Priority: </label>
106 <div class="col-lg-8 fw-bold">
107 {{selected.callerData.hold_priority()}}
111 <div class="col-lg-4">
112 <label class="form-label" i18n>User Group?: </label>
114 <div class="col-lg-8 fw-bold">
115 <!-- TODO: replace with <eg-bool/> when merged -->
116 {{selected.callerData.usergroup() === 't'}}
121 <li role="presentation" [ngbNavItem]="'perm'">
122 <a i18n ngbNavLink role="tab">Group Permissions</a>
123 <ng-template ngbNavContent>
125 <div class="row m-2 mb-3">
127 <button type="button" class="btn btn-success" (click)="applyChanges()" i18n
128 [disabled]='!changesPending()'>
133 <button type="button" class="btn btn-info ms-3" (click)="openAddDialog()" i18n>
138 <input class="form-control ms-2" [(ngModel)]="filterText"
139 i18n-placeholder placeholder="Filter..."/>
142 <button type="button" class="btn btn-outline-secondary ms-1"
143 (click)="filterText=''" i18n>
149 <div class="row fst-italic">
150 <span class="label-with-material-icon">
151 <span class="ps-1 pe-1 fw-bold text-danger
152 material-icons mat-icon-shrunk-in-button">new_releases</span>
154 Permissions marked with an enclosed checkmark
155 override parent group permissions.
160 <div class="row fw-bold">
161 <div class="col-lg-5" i18n>Permissions</div>
162 <div class="col-lg-4" i18n>Group</div>
163 <div class="col-lg-1" i18n>Depth</div>
164 <div class="col-lg-1" i18n>Grantable?</div>
165 <div class="col-lg-1" i18n>Delete?</div>
168 <div class="row" *ngFor="let map of groupPermMaps()"
169 [ngClass]="{'bg-warning': map.isdeleted()}">
170 <div class="col-lg-5">
171 <span class="label-with-material-icon">
172 <span i18n-title title="{{map.perm().description() || map.perm().code()}}">
173 {{map.perm().code()}}
175 <ng-container *ngIf="permOverrides(map)">
176 <span i18n-title title="Permission Overrides a Parent Group Permission"
177 class="ps-1 fw-bold text-danger material-icons mat-icon-shrunk-in-button">new_releases</span>
178 <span class="visually-hidden" i18n>Parent group override</span>
182 <ng-container *ngIf="permIsInherited(map); else nativeMap">
183 <div class="col-lg-4">
184 <button type="button" class="btn btn-link m-0 p-0"
185 (click)="selectGroup(map.grp().id())">
189 <div class="col-lg-1 text-center">{{map.depth()}}</div>
190 <div class="col-lg-1 d-flex flex-column justify-content-center">
191 <div class="d-flex justify-content-center p-1 rounded">
192 <eg-bool [value]="map.grantable() === 't'"></eg-bool>
195 <div class="col-lg-1 fst-italic" i18n>Inherited</div>
197 <ng-template #nativeMap>
198 <div class="col-lg-4">{{map.grp().name()}}</div>
199 <div class="col-lg-1">
200 <select [ngModel]="map.depth()" class="p-1"
201 (ngModelChange)="map.depth($event); map.ischanged(true)">
202 <option *ngFor="let d of orgDepths" value="{{d}}">{{d}}</option>
205 <div class="col-lg-1 d-flex flex-column justify-content-center">
206 <div class="d-flex justify-content-center p-1 rounded border border-info">
207 <input type="checkbox" class="align-middle"
208 i18n-title title="Grantable?"
209 [ngModel]="map.grantable() === 't'"
210 (ngModelChange)="map.grantable($event ? 't' : 'f'); map.ischanged(true)"/>
213 <div class="col-lg-1 d-flex flex-column justify-content-center">
214 <div class="d-flex justify-content-center p-1 rounded border border-danger">
215 <input type="checkbox" class="align-middle"
216 i18n-title title="Delete Mapping"
217 [ngModel]="map.isdeleted()"
218 (ngModelChange)="map.isdeleted($event)"/>
223 <div class="row d-flex m-2 mb-3">
224 <button type="submit" class="btn btn-success" (click)="applyChanges()" i18n
225 [disabled]='!changesPending()'>
233 <div [ngbNavOutlet]="PermTabs" class="mt-2"></div>