@flusys/ng-iam 1.0.0-rc → 1.0.1
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.
- package/README.md +1 -1
- package/fesm2022/{flusys-ng-iam-action-form-page.component-C_BRrrWW.mjs → flusys-ng-iam-action-form-page.component-eXpZNJ_H.mjs} +14 -64
- package/fesm2022/flusys-ng-iam-action-form-page.component-eXpZNJ_H.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-action-list-page.component-Daf93zpS.mjs → flusys-ng-iam-action-list-page.component-BtJlGcTj.mjs} +22 -49
- package/fesm2022/flusys-ng-iam-action-list-page.component-BtJlGcTj.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-flusys-ng-iam-BPIpfrjN.mjs → flusys-ng-iam-flusys-ng-iam-CJAQT60K.mjs} +295 -859
- package/fesm2022/flusys-ng-iam-flusys-ng-iam-CJAQT60K.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-iam-container.component-Bn4kQtxW.mjs → flusys-ng-iam-iam-container.component-UYJjqYV9.mjs} +5 -5
- package/fesm2022/flusys-ng-iam-iam-container.component-UYJjqYV9.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-permission-page.component-CmxOBJPu.mjs → flusys-ng-iam-permission-page.component-DcgT7L3_.mjs} +11 -46
- package/fesm2022/flusys-ng-iam-permission-page.component-DcgT7L3_.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-role-form-page.component-ByNueI1a.mjs → flusys-ng-iam-role-form-page.component-D_AAEay2.mjs} +5 -19
- package/fesm2022/flusys-ng-iam-role-form-page.component-D_AAEay2.mjs.map +1 -0
- package/fesm2022/{flusys-ng-iam-role-list-page.component-CFly5KnH.mjs → flusys-ng-iam-role-list-page.component-D4J1by6Q.mjs} +6 -23
- package/fesm2022/flusys-ng-iam-role-list-page.component-D4J1by6Q.mjs.map +1 -0
- package/fesm2022/flusys-ng-iam.mjs +1 -1
- package/package.json +11 -11
- package/types/flusys-ng-iam.d.ts +46 -445
- package/fesm2022/flusys-ng-iam-action-form-page.component-C_BRrrWW.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-action-list-page.component-Daf93zpS.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-flusys-ng-iam-BPIpfrjN.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-iam-container.component-Bn4kQtxW.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-permission-page.component-CmxOBJPu.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-role-form-page.component-ByNueI1a.mjs.map +0 -1
- package/fesm2022/flusys-ng-iam-role-list-page.component-CFly5KnH.mjs.map +0 -1
package/types/flusys-ng-iam.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IBaseEntity, ILogicNode, ApiResourceService, ISingleResponse, IProfilePermissionProvider, IProfileRoleInfo, IProfileActionInfo } from '@flusys/ng-shared';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { Provider } from '@angular/core';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { BaseApiService } from '@flusys/ng-core';
|
|
6
6
|
export { PermissionMode } from '@flusys/ng-core';
|
|
@@ -36,10 +36,6 @@ interface IBranch {
|
|
|
36
36
|
companyId: string;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
/**
|
|
40
|
-
* Role Response DTO
|
|
41
|
-
* Matches backend RoleResponseDto
|
|
42
|
-
*/
|
|
43
39
|
interface IRole extends IBaseEntity {
|
|
44
40
|
readOnly: boolean;
|
|
45
41
|
name: string;
|
|
@@ -49,10 +45,6 @@ interface IRole extends IBaseEntity {
|
|
|
49
45
|
serial: number | null;
|
|
50
46
|
metadata: Record<string, unknown> | null;
|
|
51
47
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Create Role DTO
|
|
54
|
-
* Matches backend CreateRoleDto
|
|
55
|
-
*/
|
|
56
48
|
interface ICreateRoleDto {
|
|
57
49
|
name: string;
|
|
58
50
|
description?: string;
|
|
@@ -61,35 +53,20 @@ interface ICreateRoleDto {
|
|
|
61
53
|
serial?: number;
|
|
62
54
|
metadata?: Record<string, unknown>;
|
|
63
55
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Update Role DTO
|
|
66
|
-
* Matches backend UpdateRoleDto
|
|
67
|
-
*/
|
|
68
56
|
interface IUpdateRoleDto extends Partial<ICreateRoleDto> {
|
|
69
57
|
id: string;
|
|
70
58
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Role Query DTO
|
|
73
|
-
* Matches backend RoleQueryDto
|
|
74
|
-
*/
|
|
75
59
|
interface IRoleQueryDto {
|
|
76
60
|
companyId?: string;
|
|
77
61
|
isActive?: boolean;
|
|
78
62
|
}
|
|
79
63
|
|
|
80
|
-
/**
|
|
81
|
-
* Action Type - determines how action is used
|
|
82
|
-
* CRITICAL: Must match backend ActionType enum exactly
|
|
83
|
-
*/
|
|
64
|
+
/** Must match backend ActionType enum */
|
|
84
65
|
declare enum ActionType {
|
|
85
|
-
BACKEND = "backend"
|
|
86
|
-
FRONTEND = "frontend"
|
|
66
|
+
BACKEND = "backend",
|
|
67
|
+
FRONTEND = "frontend",
|
|
87
68
|
BOTH = "both"
|
|
88
69
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Action Response DTO
|
|
91
|
-
* Matches backend ActionResponseDto
|
|
92
|
-
*/
|
|
93
70
|
interface IAction extends IBaseEntity {
|
|
94
71
|
readOnly: boolean;
|
|
95
72
|
name: string;
|
|
@@ -102,17 +79,9 @@ interface IAction extends IBaseEntity {
|
|
|
102
79
|
isActive: boolean;
|
|
103
80
|
metadata: Record<string, unknown> | null;
|
|
104
81
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Action Tree DTO
|
|
107
|
-
* Hierarchical action structure
|
|
108
|
-
*/
|
|
109
82
|
interface IActionTreeDto extends IAction {
|
|
110
83
|
children: IActionTreeDto[];
|
|
111
84
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Create Action DTO
|
|
114
|
-
* Matches backend CreateActionDto
|
|
115
|
-
*/
|
|
116
85
|
interface ICreateActionDto {
|
|
117
86
|
name: string;
|
|
118
87
|
description?: string;
|
|
@@ -124,76 +93,35 @@ interface ICreateActionDto {
|
|
|
124
93
|
isActive?: boolean;
|
|
125
94
|
metadata?: Record<string, unknown>;
|
|
126
95
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Update Action DTO
|
|
129
|
-
* Matches backend UpdateActionDto
|
|
130
|
-
*/
|
|
131
96
|
interface IUpdateActionDto extends Partial<ICreateActionDto> {
|
|
132
97
|
id: string;
|
|
133
98
|
}
|
|
134
99
|
|
|
135
|
-
/**
|
|
136
|
-
* Permission Action - 'add' or 'remove'
|
|
137
|
-
*/
|
|
138
100
|
type PermissionAction = 'add' | 'remove';
|
|
139
|
-
/**
|
|
140
|
-
* Permission Item DTO
|
|
141
|
-
* Used in all assignment operations
|
|
142
|
-
*/
|
|
143
101
|
interface IPermissionItemDto {
|
|
144
102
|
id: string;
|
|
145
103
|
action: PermissionAction;
|
|
146
104
|
}
|
|
147
|
-
/**
|
|
148
|
-
* Assign User Actions DTO
|
|
149
|
-
* Assign/remove actions directly to/from user (DIRECT/FULL mode)
|
|
150
|
-
*
|
|
151
|
-
* Permission Granularity:
|
|
152
|
-
* - companyId + branchId = undefined: Global (super admin)
|
|
153
|
-
* - companyId set + branchId = undefined: Company-wide (all branches)
|
|
154
|
-
* - companyId set + branchId set: Branch-specific
|
|
155
|
-
*/
|
|
156
105
|
interface IAssignUserActionsDto {
|
|
157
106
|
userId: string;
|
|
158
107
|
companyId?: string;
|
|
159
108
|
branchId?: string;
|
|
160
109
|
items: IPermissionItemDto[];
|
|
161
110
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Assign Company Actions DTO
|
|
164
|
-
* Whitelist actions for company (if company feature enabled)
|
|
165
|
-
*/
|
|
166
111
|
interface IAssignCompanyActionsDto {
|
|
167
112
|
companyId: string;
|
|
168
113
|
items: IPermissionItemDto[];
|
|
169
114
|
}
|
|
170
|
-
/**
|
|
171
|
-
* Assign Role Actions DTO
|
|
172
|
-
* Assign/remove actions to/from role (RBAC/FULL mode)
|
|
173
|
-
*/
|
|
174
115
|
interface IAssignRoleActionsDto {
|
|
175
116
|
roleId: string;
|
|
176
117
|
items: IPermissionItemDto[];
|
|
177
118
|
}
|
|
178
|
-
/**
|
|
179
|
-
* Assign User Roles DTO
|
|
180
|
-
* Assign/remove roles to/from user (RBAC/FULL mode)
|
|
181
|
-
*
|
|
182
|
-
* Permission Granularity:
|
|
183
|
-
* - companyId + branchId = undefined: Global (super admin)
|
|
184
|
-
* - companyId set + branchId = undefined: Company-wide (all branches)
|
|
185
|
-
* - companyId set + branchId set: Branch-specific
|
|
186
|
-
*/
|
|
187
119
|
interface IAssignUserRolesDto {
|
|
188
120
|
userId: string;
|
|
189
121
|
companyId?: string;
|
|
190
122
|
branchId?: string;
|
|
191
123
|
items: IPermissionItemDto[];
|
|
192
124
|
}
|
|
193
|
-
/**
|
|
194
|
-
* User Action Response DTO
|
|
195
|
-
* Direct user → action permissions (branch-scoped if company feature enabled)
|
|
196
|
-
*/
|
|
197
125
|
interface IUserActionResponseDto {
|
|
198
126
|
id: string;
|
|
199
127
|
userId: string;
|
|
@@ -203,10 +131,6 @@ interface IUserActionResponseDto {
|
|
|
203
131
|
branchId: string | null;
|
|
204
132
|
createdAt: Date;
|
|
205
133
|
}
|
|
206
|
-
/**
|
|
207
|
-
* Role Action Response DTO
|
|
208
|
-
* Role → action permissions (NOT branch-scoped)
|
|
209
|
-
*/
|
|
210
134
|
interface IRoleActionResponseDto {
|
|
211
135
|
id: string;
|
|
212
136
|
roleId: string;
|
|
@@ -215,10 +139,6 @@ interface IRoleActionResponseDto {
|
|
|
215
139
|
actionName: string;
|
|
216
140
|
createdAt: Date;
|
|
217
141
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Company Action Response DTO
|
|
220
|
-
* Company → action whitelist
|
|
221
|
-
*/
|
|
222
142
|
interface ICompanyActionResponseDto {
|
|
223
143
|
id: string;
|
|
224
144
|
companyId: string;
|
|
@@ -227,10 +147,6 @@ interface ICompanyActionResponseDto {
|
|
|
227
147
|
actionName: string;
|
|
228
148
|
createdAt: Date;
|
|
229
149
|
}
|
|
230
|
-
/**
|
|
231
|
-
* User Role Response DTO
|
|
232
|
-
* User → role assignments (NOT branch-scoped)
|
|
233
|
-
*/
|
|
234
150
|
interface IUserRoleResponseDto {
|
|
235
151
|
id: string;
|
|
236
152
|
userId: string;
|
|
@@ -240,24 +156,6 @@ interface IUserRoleResponseDto {
|
|
|
240
156
|
branchId: string | null;
|
|
241
157
|
createdAt: Date;
|
|
242
158
|
}
|
|
243
|
-
/**
|
|
244
|
-
* Menu item from IAM permissions (menu-type actions)
|
|
245
|
-
*/
|
|
246
|
-
interface IMenuAction {
|
|
247
|
-
id: string;
|
|
248
|
-
code: string;
|
|
249
|
-
name: string;
|
|
250
|
-
route: string | null;
|
|
251
|
-
icon: string | null;
|
|
252
|
-
iconType: number | null;
|
|
253
|
-
serial: number | null;
|
|
254
|
-
parentId: string | null;
|
|
255
|
-
children?: IMenuAction[];
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* My Permissions Response DTO
|
|
259
|
-
* Complete user permissions (frontend actions, cached endpoints, menus)
|
|
260
|
-
*/
|
|
261
159
|
interface IMyPermissionsResponseDto {
|
|
262
160
|
frontendActions: Array<{
|
|
263
161
|
id: string;
|
|
@@ -267,29 +165,17 @@ interface IMyPermissionsResponseDto {
|
|
|
267
165
|
}>;
|
|
268
166
|
cachedEndpoints: number;
|
|
269
167
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Prerequisite Action DTO
|
|
272
|
-
* Action required as a prerequisite
|
|
273
|
-
*/
|
|
274
168
|
interface IPrerequisiteActionDto {
|
|
275
169
|
actionId: string;
|
|
276
170
|
actionCode: string;
|
|
277
171
|
actionName: string;
|
|
278
172
|
}
|
|
279
|
-
/**
|
|
280
|
-
* Prerequisite Validation Error
|
|
281
|
-
* Describes an action that failed prerequisite validation
|
|
282
|
-
*/
|
|
283
173
|
interface IPrerequisiteValidationError {
|
|
284
174
|
actionId: string;
|
|
285
175
|
actionCode: string;
|
|
286
176
|
actionName: string;
|
|
287
177
|
requiredActions: IPrerequisiteActionDto[];
|
|
288
178
|
}
|
|
289
|
-
/**
|
|
290
|
-
* Permission Operation Result DTO
|
|
291
|
-
* Result of assignment operations
|
|
292
|
-
*/
|
|
293
179
|
interface IPermissionOperationResultDto {
|
|
294
180
|
success: boolean;
|
|
295
181
|
added: number;
|
|
@@ -297,218 +183,60 @@ interface IPermissionOperationResultDto {
|
|
|
297
183
|
message: string;
|
|
298
184
|
prerequisiteErrors?: IPrerequisiteValidationError[];
|
|
299
185
|
}
|
|
300
|
-
/**
|
|
301
|
-
* Get User Actions DTO
|
|
302
|
-
* Optional branchId filter
|
|
303
|
-
*/
|
|
304
186
|
interface IGetUserActionsDto {
|
|
305
187
|
branchId?: string;
|
|
306
188
|
}
|
|
307
|
-
/**
|
|
308
|
-
* Get Role Actions DTO
|
|
309
|
-
* No parameters
|
|
310
|
-
*/
|
|
311
189
|
interface IGetRoleActionsDto {
|
|
312
190
|
}
|
|
313
|
-
/**
|
|
314
|
-
* Get User Roles DTO
|
|
315
|
-
* Optional branchId filter (ignored - roles are NOT branch-scoped)
|
|
316
|
-
*/
|
|
317
191
|
interface IGetUserRolesDto {
|
|
318
192
|
branchId?: string;
|
|
319
193
|
}
|
|
320
|
-
/**
|
|
321
|
-
* Get My Permissions DTO
|
|
322
|
-
* Optional parentCodes filter for frontend actions
|
|
323
|
-
*/
|
|
324
194
|
interface IGetMyPermissionsDto {
|
|
325
195
|
parentCodes?: string[];
|
|
326
196
|
}
|
|
327
197
|
|
|
328
|
-
/**
|
|
329
|
-
* Pagination Constants
|
|
330
|
-
*
|
|
331
|
-
* Standard pagination limits for IAM components.
|
|
332
|
-
* Prevents excessive data loading and potential DoS.
|
|
333
|
-
*/
|
|
334
|
-
/**
|
|
335
|
-
* Maximum items to fetch for dropdown lists
|
|
336
|
-
* Used for: companies, roles, users, branches
|
|
337
|
-
*
|
|
338
|
-
* Security: Prevents memory exhaustion from loading excessive records
|
|
339
|
-
*/
|
|
198
|
+
/** Maximum items for dropdown lists (companies, roles, users, branches) */
|
|
340
199
|
declare const MAX_DROPDOWN_ITEMS = 100;
|
|
341
200
|
|
|
342
|
-
/**
|
|
343
|
-
* Role API Service
|
|
344
|
-
* Handles role CRUD operations
|
|
345
|
-
* Endpoint: POST /iam/roles/*
|
|
346
|
-
* Conditional: Only available in RBAC/FULL mode
|
|
347
|
-
*/
|
|
348
201
|
declare class RoleApiService extends ApiResourceService<IUpdateRoleDto, IRole> {
|
|
349
202
|
constructor();
|
|
350
203
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RoleApiService, never>;
|
|
351
204
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RoleApiService>;
|
|
352
205
|
}
|
|
353
206
|
|
|
354
|
-
/**
|
|
355
|
-
* Action API Service
|
|
356
|
-
* Handles action CRUD operations
|
|
357
|
-
* Endpoint: POST /iam/actions/*
|
|
358
|
-
*/
|
|
359
207
|
declare class ActionApiService extends ApiResourceService<IUpdateActionDto, IAction> {
|
|
360
208
|
private readonly appConfig;
|
|
361
209
|
constructor();
|
|
362
|
-
/**
|
|
363
|
-
* Get actions for permission assignment
|
|
364
|
-
* POST /iam/actions/tree-for-permission
|
|
365
|
-
* Returns actions filtered by company whitelist if enabled
|
|
366
|
-
*/
|
|
210
|
+
/** Get actions filtered by company whitelist for permission assignment */
|
|
367
211
|
getActionsForPermission(): Observable<ISingleResponse<IActionTreeDto[]>>;
|
|
368
|
-
/**
|
|
369
|
-
* Get actions in hierarchical tree structure
|
|
370
|
-
* POST /iam/actions/tree
|
|
371
|
-
* Returns all actions organized in parent-child tree
|
|
372
|
-
*
|
|
373
|
-
* @param search - Optional search term (name or code)
|
|
374
|
-
* @param isActive - Optional filter by active status
|
|
375
|
-
* @param withDeleted - Include deleted actions (default: false)
|
|
376
|
-
* @returns Observable of action tree response
|
|
377
|
-
*/
|
|
212
|
+
/** Get actions in hierarchical tree structure */
|
|
378
213
|
getTree(search?: string, isActive?: boolean, withDeleted?: boolean): Observable<ISingleResponse<IActionTreeDto[]>>;
|
|
379
214
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionApiService, never>;
|
|
380
215
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ActionApiService>;
|
|
381
216
|
}
|
|
382
217
|
|
|
383
|
-
/**
|
|
384
|
-
* Action Permission Logic Service
|
|
385
|
-
*
|
|
386
|
-
* Shared service for handling smart dependency management across all action selectors:
|
|
387
|
-
* - Company-Action Selector
|
|
388
|
-
* - Role-Action Selector
|
|
389
|
-
* - User-Action Selector
|
|
390
|
-
*
|
|
391
|
-
* **Core Features:**
|
|
392
|
-
* - Smart auto-selection (AND/OR optimization)
|
|
393
|
-
* - Dependency detection and management
|
|
394
|
-
* - Alternative suggestion for OR logic
|
|
395
|
-
* - Visual formatting of permission logic trees
|
|
396
|
-
* - Prerequisite validation
|
|
397
|
-
*
|
|
398
|
-
* @example
|
|
399
|
-
* constructor() {
|
|
400
|
-
* this.permissionLogic = inject(ActionPermissionLogicService);
|
|
401
|
-
* }
|
|
402
|
-
*
|
|
403
|
-
* onActionToggle(action: IAction, newValue: boolean) {
|
|
404
|
-
* if (!newValue) {
|
|
405
|
-
* this.permissionLogic.handleUncheck(
|
|
406
|
-
* action,
|
|
407
|
-
* this.selectionMap(),
|
|
408
|
-
* this.actions(),
|
|
409
|
-
* (newMap) => this.selectionMap.set(newMap)
|
|
410
|
-
* );
|
|
411
|
-
* } else {
|
|
412
|
-
* this.permissionLogic.handleCheck(
|
|
413
|
-
* action,
|
|
414
|
-
* this.selectionMap(),
|
|
415
|
-
* this.actions(),
|
|
416
|
-
* (newMap) => this.selectionMap.set(newMap),
|
|
417
|
-
* (previousState) => this.selectionMap.set(previousState)
|
|
418
|
-
* );
|
|
419
|
-
* }
|
|
420
|
-
* }
|
|
421
|
-
*/
|
|
218
|
+
/** Shared service for smart dependency management across action selectors */
|
|
422
219
|
declare class ActionPermissionLogicService {
|
|
423
220
|
private readonly confirmationService;
|
|
424
221
|
private readonly messageService;
|
|
425
|
-
/**
|
|
426
|
-
* Handle checking an action with prerequisite validation
|
|
427
|
-
*
|
|
428
|
-
* Uses recursive deep scan to find ALL missing prerequisites at all levels,
|
|
429
|
-
* not just direct dependencies. This ensures cascading dependencies are
|
|
430
|
-
* resolved in a single step.
|
|
431
|
-
*
|
|
432
|
-
* @param action - Action being checked
|
|
433
|
-
* @param currentSelection - Current selection map
|
|
434
|
-
* @param allActions - All available actions
|
|
435
|
-
* @param onUpdate - Callback to update selection
|
|
436
|
-
* @param onCancel - Callback when user cancels
|
|
437
|
-
*/
|
|
222
|
+
/** Handle checking an action with prerequisite validation (recursive deep scan) */
|
|
438
223
|
handleCheck(action: IAction, currentSelection: Record<string, boolean>, allActions: IAction[], onUpdate: (newSelection: Record<string, boolean>) => void, onCancel: (previousState: Record<string, boolean>) => void): void;
|
|
439
|
-
/**
|
|
440
|
-
* Handle unchecking an action with dependency detection
|
|
441
|
-
*
|
|
442
|
-
* @param action - Action being unchecked
|
|
443
|
-
* @param currentSelection - Current selection map
|
|
444
|
-
* @param allActions - All available actions
|
|
445
|
-
* @param onUpdate - Callback to update selection
|
|
446
|
-
*/
|
|
224
|
+
/** Handle unchecking an action with dependency detection */
|
|
447
225
|
handleUncheck(action: IAction, currentSelection: Record<string, boolean>, allActions: IAction[], onUpdate: (newSelection: Record<string, boolean>) => void): void;
|
|
448
|
-
/**
|
|
449
|
-
* Check if an action has unmet prerequisites
|
|
450
|
-
*
|
|
451
|
-
* @param action - Action to check
|
|
452
|
-
* @param currentSelection - Current selection map
|
|
453
|
-
* @param allActions - All available actions
|
|
454
|
-
* @returns True if action has unmet prerequisites
|
|
455
|
-
*/
|
|
226
|
+
/** Check if an action has unmet prerequisites */
|
|
456
227
|
hasUnmetPrerequisites(action: IAction, currentSelection: Record<string, boolean>, allActions: IAction[]): boolean;
|
|
457
|
-
/**
|
|
458
|
-
* Get all selected actions that have unmet prerequisites
|
|
459
|
-
*
|
|
460
|
-
* @param currentSelection - Current selection map
|
|
461
|
-
* @param allActions - All available actions
|
|
462
|
-
* @returns Array of actions with unmet prerequisites
|
|
463
|
-
*/
|
|
228
|
+
/** Get all selected actions that have unmet prerequisites */
|
|
464
229
|
getActionsWithUnmetPrerequisites(currentSelection: Record<string, boolean>, allActions: IAction[]): IAction[];
|
|
465
|
-
/**
|
|
466
|
-
* Show validation error dialog with auto-fix options
|
|
467
|
-
*
|
|
468
|
-
* @param invalidActions - Actions with unmet prerequisites
|
|
469
|
-
* @param currentSelection - Current selection map
|
|
470
|
-
* @param allActions - All available actions
|
|
471
|
-
* @param onUpdate - Callback to update selection
|
|
472
|
-
*/
|
|
230
|
+
/** Show validation error dialog with auto-fix options */
|
|
473
231
|
showValidationErrorDialog(invalidActions: IAction[], currentSelection: Record<string, boolean>, allActions: IAction[], onUpdate: (newSelection: Record<string, boolean>) => void): void;
|
|
474
|
-
/**
|
|
475
|
-
* Get prerequisite description for tooltip display
|
|
476
|
-
*
|
|
477
|
-
* @param action - Action to get prerequisites for
|
|
478
|
-
* @param currentSelection - Current selection map
|
|
479
|
-
* @param allActions - All available actions
|
|
480
|
-
* @returns Plain text prerequisite description
|
|
481
|
-
*/
|
|
232
|
+
/** Get prerequisite description for tooltip display */
|
|
482
233
|
getPrerequisiteTooltip(action: IAction, currentSelection: Record<string, boolean>, allActions: IAction[]): string;
|
|
483
|
-
/**
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
* @param missingActions - Actions that are missing
|
|
488
|
-
* @param allActions - All available actions
|
|
489
|
-
* @param currentSelection - Current selection map for accurate status
|
|
490
|
-
* @returns HTML formatted logic tree
|
|
491
|
-
*/
|
|
492
|
-
buildLogicMessage(logic: ILogicNode, missingActions: IAction[], allActions: IAction[], currentSelection?: Record<string, boolean>): string;
|
|
234
|
+
/** Build dynamic logic tree message with AND/OR operators and nesting */
|
|
235
|
+
buildLogicMessage(logic: ILogicNode, _missingActions: IAction[], allActions: IAction[], currentSelection?: Record<string, boolean>): string;
|
|
236
|
+
/** Extract selected action IDs from selection map */
|
|
237
|
+
private getSelectedIds;
|
|
493
238
|
private sanitizeHtml;
|
|
494
|
-
/**
|
|
495
|
-
* Recursively collect ALL missing prerequisites at all dependency levels
|
|
496
|
-
*
|
|
497
|
-
* This prevents cascading prerequisite dialogs by finding the complete
|
|
498
|
-
* dependency chain upfront.
|
|
499
|
-
*
|
|
500
|
-
* **Example:**
|
|
501
|
-
* - Action 4 requires Action 3
|
|
502
|
-
* - Action 3 requires Action 2
|
|
503
|
-
* - Action 2 requires Action 1
|
|
504
|
-
*
|
|
505
|
-
* Instead of showing 3 separate dialogs, this returns: [Action 3, Action 2, Action 1]
|
|
506
|
-
*
|
|
507
|
-
* @param action - Starting action to check
|
|
508
|
-
* @param currentSelection - Current selection map
|
|
509
|
-
* @param allActions - All available actions
|
|
510
|
-
* @returns Complete set of missing prerequisites across all levels
|
|
511
|
-
*/
|
|
239
|
+
/** Recursively collect ALL missing prerequisites at all dependency levels */
|
|
512
240
|
private getAllMissingPrerequisitesRecursive;
|
|
513
241
|
private showPrerequisiteDialog;
|
|
514
242
|
private showDependencyDialog;
|
|
@@ -520,66 +248,21 @@ declare class ActionPermissionLogicService {
|
|
|
520
248
|
private findRequiredActionIds;
|
|
521
249
|
private buildSimpleMessage;
|
|
522
250
|
private formatLogicNode;
|
|
523
|
-
/**
|
|
524
|
-
* Build clean text-based logic tree for tooltips
|
|
525
|
-
*/
|
|
251
|
+
/** Build clean text-based logic tree for tooltips */
|
|
526
252
|
private buildTooltipLogicTree;
|
|
527
253
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionPermissionLogicService, never>;
|
|
528
254
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ActionPermissionLogicService>;
|
|
529
255
|
}
|
|
530
256
|
|
|
531
|
-
/**
|
|
532
|
-
* Consolidated Permission API Service
|
|
533
|
-
* Handles all permission-related operations in one service
|
|
534
|
-
* Supports:
|
|
535
|
-
* - User → Action (direct permissions)
|
|
536
|
-
* - User → Role (role assignments)
|
|
537
|
-
* - Role → Action (role permissions)
|
|
538
|
-
* - Company → Action (company whitelisting)
|
|
539
|
-
*
|
|
540
|
-
* Endpoint: POST /permissions/*
|
|
541
|
-
*/
|
|
542
257
|
declare class PermissionApiService extends BaseApiService {
|
|
543
258
|
constructor();
|
|
544
|
-
/**
|
|
545
|
-
* Assign/remove actions directly to/from user
|
|
546
|
-
* POST /permissions/user-actions/assign
|
|
547
|
-
*/
|
|
548
259
|
assignUserActions(data: IAssignUserActionsDto): Observable<ISingleResponse<IPermissionOperationResultDto>>;
|
|
549
|
-
/**
|
|
550
|
-
* Get user's direct action permissions
|
|
551
|
-
* POST /iam/permissions/get-user-actions
|
|
552
|
-
*/
|
|
553
260
|
getUserActions(userId: string, query?: IGetUserActionsDto): Observable<ISingleResponse<IUserActionResponseDto[]>>;
|
|
554
|
-
/**
|
|
555
|
-
* Assign/remove roles to/from user
|
|
556
|
-
* POST /permissions/user-roles/assign
|
|
557
|
-
*/
|
|
558
261
|
assignUserRoles(data: IAssignUserRolesDto): Observable<ISingleResponse<IPermissionOperationResultDto>>;
|
|
559
|
-
/**
|
|
560
|
-
* Get user's role assignments
|
|
561
|
-
* POST /iam/permissions/get-user-roles
|
|
562
|
-
*/
|
|
563
262
|
getUserRoles(userId: string, query?: IGetUserRolesDto): Observable<ISingleResponse<IUserRoleResponseDto[]>>;
|
|
564
|
-
/**
|
|
565
|
-
* Assign/remove actions to/from role
|
|
566
|
-
* POST /permissions/role-actions/assign
|
|
567
|
-
*/
|
|
568
263
|
assignRoleActions(data: IAssignRoleActionsDto): Observable<ISingleResponse<IPermissionOperationResultDto>>;
|
|
569
|
-
|
|
570
|
-
* Get role's action permissions
|
|
571
|
-
* POST /iam/permissions/get-role-actions
|
|
572
|
-
*/
|
|
573
|
-
getRoleActions(roleId: string, query?: IGetRoleActionsDto): Observable<ISingleResponse<IRoleActionResponseDto[]>>;
|
|
574
|
-
/**
|
|
575
|
-
* Assign/remove actions to/from company (whitelisting)
|
|
576
|
-
* POST /permissions/company-actions/assign
|
|
577
|
-
*/
|
|
264
|
+
getRoleActions(roleId: string): Observable<ISingleResponse<IRoleActionResponseDto[]>>;
|
|
578
265
|
assignCompanyActions(data: IAssignCompanyActionsDto): Observable<ISingleResponse<IPermissionOperationResultDto>>;
|
|
579
|
-
/**
|
|
580
|
-
* Get company's whitelisted actions
|
|
581
|
-
* POST /iam/permissions/get-company-actions
|
|
582
|
-
*/
|
|
583
266
|
getCompanyActions(companyId: string): Observable<ISingleResponse<ICompanyActionResponseDto[]>>;
|
|
584
267
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionApiService, never>;
|
|
585
268
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PermissionApiService>;
|
|
@@ -595,7 +278,6 @@ declare class MyPermissionsApiService {
|
|
|
595
278
|
private readonly http;
|
|
596
279
|
private readonly appConfig;
|
|
597
280
|
private readonly baseUrl;
|
|
598
|
-
constructor();
|
|
599
281
|
/**
|
|
600
282
|
* Get current user's complete permissions
|
|
601
283
|
* POST /iam/permissions/my-permissions
|
|
@@ -607,45 +289,14 @@ declare class MyPermissionsApiService {
|
|
|
607
289
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MyPermissionsApiService>;
|
|
608
290
|
}
|
|
609
291
|
|
|
610
|
-
/**
|
|
611
|
-
* Permission State Service
|
|
612
|
-
* Manages user permissions state and provides permission checking methods
|
|
613
|
-
*
|
|
614
|
-
* Uses shared PermissionValidatorService for centralized permission checking.
|
|
615
|
-
*
|
|
616
|
-
* @example
|
|
617
|
-
* ```typescript
|
|
618
|
-
* // In component
|
|
619
|
-
* readonly permissionState = inject(PermissionStateService);
|
|
620
|
-
*
|
|
621
|
-
* ngOnInit() {
|
|
622
|
-
* this.permissionState.loadPermissions();
|
|
623
|
-
* }
|
|
624
|
-
*
|
|
625
|
-
* // Check permission
|
|
626
|
-
* if (this.permissionState.hasAction('user.create')) {
|
|
627
|
-
* // Show create button
|
|
628
|
-
* }
|
|
629
|
-
* ```
|
|
630
|
-
*/
|
|
631
292
|
declare class PermissionStateService {
|
|
632
293
|
private readonly permissionApi;
|
|
633
294
|
private readonly permissionValidator;
|
|
634
295
|
private readonly _permissions;
|
|
635
|
-
readonly permissions: Signal<IMyPermissionsResponseDto | null>;
|
|
296
|
+
readonly permissions: _angular_core.Signal<IMyPermissionsResponseDto | null>;
|
|
636
297
|
private readonly _isLoading;
|
|
637
|
-
readonly isLoading: Signal<boolean>;
|
|
638
|
-
/**
|
|
639
|
-
* Load current user's permissions from API
|
|
640
|
-
* Call this on app initialization or after login
|
|
641
|
-
* Returns Observable for reactive composition
|
|
642
|
-
*/
|
|
298
|
+
readonly isLoading: _angular_core.Signal<boolean>;
|
|
643
299
|
loadPermissions(dto?: IGetMyPermissionsDto): Observable<void>;
|
|
644
|
-
/**
|
|
645
|
-
* Check if permissions are loaded
|
|
646
|
-
*
|
|
647
|
-
* @returns true if permissions are loaded
|
|
648
|
-
*/
|
|
649
300
|
isLoaded(): boolean;
|
|
650
301
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionStateService, never>;
|
|
651
302
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PermissionStateService>;
|
|
@@ -667,10 +318,6 @@ declare class LogicBuilderComponent {
|
|
|
667
318
|
name: string;
|
|
668
319
|
}[]>;
|
|
669
320
|
readonly logicChange: _angular_core.OutputEmitterRef<ILogicNode | null>;
|
|
670
|
-
readonly availableActions: _angular_core.Signal<{
|
|
671
|
-
id: string;
|
|
672
|
-
name: string;
|
|
673
|
-
}[]>;
|
|
674
321
|
/** Internal builder tree state (private writable + public readonly pattern) */
|
|
675
322
|
private readonly _builderTree;
|
|
676
323
|
readonly builderLogic: _angular_core.Signal<IBuilderNode | null>;
|
|
@@ -681,7 +328,10 @@ declare class LogicBuilderComponent {
|
|
|
681
328
|
addChildNode(parentId: string, type: 'group' | 'action'): void;
|
|
682
329
|
removeNode(nodeId: string): void;
|
|
683
330
|
updateActionId(nodeId: string, actionId: string): void;
|
|
684
|
-
|
|
331
|
+
/** Updates a node in the tree and emits the change */
|
|
332
|
+
private updateNode;
|
|
333
|
+
/** Sets the tree and emits the change */
|
|
334
|
+
private updateTreeAndEmit;
|
|
685
335
|
private updateNodeInTree;
|
|
686
336
|
private removeNodeFromTree;
|
|
687
337
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LogicBuilderComponent, never>;
|
|
@@ -775,25 +425,16 @@ declare class RoleActionSelectorComponent {
|
|
|
775
425
|
* Handle action toggle with dependency management
|
|
776
426
|
*/
|
|
777
427
|
onActionToggle(action: IAction, newValue: boolean): void;
|
|
778
|
-
/**
|
|
779
|
-
* Toggle all actions
|
|
780
|
-
*/
|
|
781
428
|
toggleAll(): void;
|
|
782
|
-
/**
|
|
783
|
-
* Select all actions
|
|
784
|
-
*/
|
|
785
429
|
selectAll(): void;
|
|
786
|
-
/**
|
|
787
|
-
* Deselect all actions
|
|
788
|
-
*/
|
|
789
430
|
deselectAll(): void;
|
|
431
|
+
private setAllSelection;
|
|
790
432
|
/**
|
|
791
433
|
* Save changes to backend
|
|
792
434
|
*/
|
|
793
435
|
saveChanges(): Promise<void>;
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
*/
|
|
436
|
+
private applySelection;
|
|
437
|
+
private buildPayloadItems;
|
|
797
438
|
private resetState;
|
|
798
439
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RoleActionSelectorComponent, never>;
|
|
799
440
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RoleActionSelectorComponent, "flusys-role-action-selector", never, {}, {}, never, never, true, never>;
|
|
@@ -887,18 +528,10 @@ declare class CompanyActionSelectorComponent {
|
|
|
887
528
|
* Handle action checkbox toggle
|
|
888
529
|
*/
|
|
889
530
|
onActionToggle(action: IAction, newValue: boolean): void;
|
|
890
|
-
/**
|
|
891
|
-
* Toggle all actions
|
|
892
|
-
*/
|
|
893
531
|
toggleAll(): void;
|
|
894
|
-
/**
|
|
895
|
-
* Select all actions
|
|
896
|
-
*/
|
|
897
532
|
selectAll(): void;
|
|
898
|
-
/**
|
|
899
|
-
* Deselect all actions
|
|
900
|
-
*/
|
|
901
533
|
deselectAll(): void;
|
|
534
|
+
private setAllSelection;
|
|
902
535
|
/**
|
|
903
536
|
* Save changes to backend
|
|
904
537
|
*/
|
|
@@ -908,10 +541,9 @@ declare class CompanyActionSelectorComponent {
|
|
|
908
541
|
* Shows confirmation dialog with auto-fix option
|
|
909
542
|
*/
|
|
910
543
|
private handleBackendPrerequisiteErrors;
|
|
911
|
-
/**
|
|
912
|
-
* Reset component state
|
|
913
|
-
*/
|
|
914
544
|
private resetState;
|
|
545
|
+
private buildSelectionMap;
|
|
546
|
+
private buildPayloadItems;
|
|
915
547
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CompanyActionSelectorComponent, never>;
|
|
916
548
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CompanyActionSelectorComponent, "flusys-company-action-selector", never, {}, {}, never, never, true, never>;
|
|
917
549
|
}
|
|
@@ -957,8 +589,6 @@ declare class UserRoleSelectorComponent {
|
|
|
957
589
|
private readonly roleApi;
|
|
958
590
|
private readonly permissionApi;
|
|
959
591
|
private readonly messageService;
|
|
960
|
-
private readonly destroyRef;
|
|
961
|
-
private loadDataAbortController;
|
|
962
592
|
readonly selectedUserId: _angular_core.WritableSignal<string | null>;
|
|
963
593
|
readonly selectedBranchId: _angular_core.WritableSignal<string | undefined>;
|
|
964
594
|
readonly branches: _angular_core.WritableSignal<IBranch[]>;
|
|
@@ -1006,6 +636,10 @@ declare class UserRoleSelectorComponent {
|
|
|
1006
636
|
* Deselect all roles
|
|
1007
637
|
*/
|
|
1008
638
|
deselectAll(): void;
|
|
639
|
+
/**
|
|
640
|
+
* Set all role selections to a given value
|
|
641
|
+
*/
|
|
642
|
+
private setAllSelections;
|
|
1009
643
|
/**
|
|
1010
644
|
* Save changes to backend
|
|
1011
645
|
*/
|
|
@@ -1061,8 +695,6 @@ declare class UserActionSelectorComponent {
|
|
|
1061
695
|
private readonly permissionApi;
|
|
1062
696
|
private readonly permissionLogic;
|
|
1063
697
|
private readonly messageService;
|
|
1064
|
-
private readonly destroyRef;
|
|
1065
|
-
private loadDataAbortController;
|
|
1066
698
|
readonly selectedUserId: _angular_core.WritableSignal<string | null>;
|
|
1067
699
|
readonly selectedBranchId: _angular_core.WritableSignal<string | undefined>;
|
|
1068
700
|
readonly branches: _angular_core.WritableSignal<IBranch[]>;
|
|
@@ -1076,6 +708,7 @@ declare class UserActionSelectorComponent {
|
|
|
1076
708
|
readonly selectionMap: _angular_core.Signal<Record<string, boolean>>;
|
|
1077
709
|
private readonly _initialSelection;
|
|
1078
710
|
private readonly initialSelection;
|
|
711
|
+
private readonly isCompanyFeatureActive;
|
|
1079
712
|
readonly showBranchSelector: _angular_core.Signal<boolean>;
|
|
1080
713
|
readonly filteredBranches: _angular_core.Signal<IBranch[]>;
|
|
1081
714
|
readonly treeNodes: _angular_core.Signal<primeng_api.TreeNode<IAction>[]>;
|
|
@@ -1107,26 +740,14 @@ declare class UserActionSelectorComponent {
|
|
|
1107
740
|
* Handle action toggle with dependency management
|
|
1108
741
|
*/
|
|
1109
742
|
onActionToggle(action: IAction, newValue: boolean): void;
|
|
1110
|
-
/**
|
|
1111
|
-
* Toggle all actions
|
|
1112
|
-
*/
|
|
1113
743
|
toggleAll(): void;
|
|
1114
|
-
/**
|
|
1115
|
-
* Select all actions
|
|
1116
|
-
*/
|
|
1117
744
|
selectAll(): void;
|
|
1118
|
-
/**
|
|
1119
|
-
* Deselect all actions
|
|
1120
|
-
*/
|
|
1121
745
|
deselectAll(): void;
|
|
1122
|
-
|
|
1123
|
-
* Save changes to backend
|
|
1124
|
-
*/
|
|
746
|
+
private setAllActions;
|
|
1125
747
|
saveChanges(): Promise<void>;
|
|
1126
|
-
/**
|
|
1127
|
-
* Reset component state
|
|
1128
|
-
*/
|
|
1129
748
|
private resetState;
|
|
749
|
+
private buildSelectionMap;
|
|
750
|
+
private buildPermissionItems;
|
|
1130
751
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserActionSelectorComponent, never>;
|
|
1131
752
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserActionSelectorComponent, "flusys-user-action-selector", never, {}, {}, never, never, true, never>;
|
|
1132
753
|
}
|
|
@@ -1155,38 +776,18 @@ declare class ProfilePermissionProviderAdapter implements IProfilePermissionProv
|
|
|
1155
776
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ProfilePermissionProviderAdapter>;
|
|
1156
777
|
}
|
|
1157
778
|
|
|
1158
|
-
/**
|
|
1159
|
-
* Provide IAM Provider Adapters
|
|
1160
|
-
*
|
|
1161
|
-
* Registers IAM implementations for provider interfaces from ng-shared.
|
|
1162
|
-
* This allows ng-auth profile page to display permissions without direct dependencies.
|
|
1163
|
-
*
|
|
1164
|
-
* @example
|
|
1165
|
-
* // In app.config.ts
|
|
1166
|
-
* import { provideIamProviders } from '@flusys/ng-iam';
|
|
1167
|
-
*
|
|
1168
|
-
* export const appConfig: ApplicationConfig = {
|
|
1169
|
-
* providers: [
|
|
1170
|
-
* ...provideIamProviders(),
|
|
1171
|
-
* // ... other providers
|
|
1172
|
-
* ]
|
|
1173
|
-
* };
|
|
1174
|
-
*
|
|
1175
|
-
* @returns Array of Angular providers
|
|
1176
|
-
*/
|
|
779
|
+
/** Registers IAM provider adapters for ng-shared interfaces */
|
|
1177
780
|
declare function provideIamProviders(): Provider[];
|
|
1178
781
|
|
|
1179
782
|
/**
|
|
1180
783
|
* IAM Routes Configuration
|
|
1181
784
|
*
|
|
1182
|
-
* Identity and Access Management routing
|
|
1183
|
-
* - Actions: Permission actions
|
|
785
|
+
* Identity and Access Management routing with permission guards.
|
|
786
|
+
* - Actions: Permission actions management
|
|
1184
787
|
* - Roles: Role management (conditional on RBAC/FULL mode)
|
|
1185
|
-
* - Permissions: User permission assignments
|
|
1186
|
-
*
|
|
1187
|
-
* All routes are protected by permission guards to prevent direct URL access.
|
|
788
|
+
* - Permissions: User permission assignments
|
|
1188
789
|
*/
|
|
1189
790
|
declare const IAM_ROUTES: Routes;
|
|
1190
791
|
|
|
1191
792
|
export { ActionApiService, ActionPermissionLogicService, ActionType, CompanyActionSelectorComponent, IAM_ROUTES, LogicBuilderComponent, MAX_DROPDOWN_ITEMS, MyPermissionsApiService, PermissionApiService, PermissionStateService, ProfilePermissionProviderAdapter, RoleActionSelectorComponent, RoleApiService, UserActionSelectorComponent, UserRoleSelectorComponent, provideIamProviders };
|
|
1192
|
-
export type { IAction, IActionTreeDto, IAssignCompanyActionsDto, IAssignRoleActionsDto, IAssignUserActionsDto, IAssignUserRolesDto, IBranch, ICompany, ICompanyActionResponseDto, ICreateActionDto, ICreateRoleDto, IGetMyPermissionsDto, IGetRoleActionsDto, IGetUserActionsDto, IGetUserRolesDto,
|
|
793
|
+
export type { IAction, IActionTreeDto, IAssignCompanyActionsDto, IAssignRoleActionsDto, IAssignUserActionsDto, IAssignUserRolesDto, IBranch, ICompany, ICompanyActionResponseDto, ICreateActionDto, ICreateRoleDto, IGetMyPermissionsDto, IGetRoleActionsDto, IGetUserActionsDto, IGetUserRolesDto, IMyPermissionsResponseDto, IPermissionItemDto, IPermissionOperationResultDto, IPrerequisiteActionDto, IPrerequisiteValidationError, IRole, IRoleActionResponseDto, IRoleQueryDto, IUpdateActionDto, IUpdateRoleDto, IUser, IUserActionResponseDto, IUserRoleResponseDto, PermissionAction };
|