@flusys/nestjs-iam 1.1.0-beta → 2.0.0
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 +285 -115
- package/cjs/controllers/action.controller.js +45 -2
- package/cjs/controllers/company-action-permission.controller.js +16 -10
- package/cjs/controllers/my-permission.controller.js +7 -3
- package/cjs/controllers/role-permission.controller.js +35 -17
- package/cjs/controllers/role.controller.js +46 -3
- package/cjs/controllers/user-action-permission.controller.js +26 -11
- package/cjs/dtos/action.dto.js +0 -27
- package/cjs/dtos/permission.dto.js +117 -27
- package/cjs/dtos/role.dto.js +0 -27
- package/cjs/entities/permission-base.entity.js +0 -12
- package/cjs/helpers/company-access.helper.js +19 -0
- package/cjs/helpers/index.js +1 -1
- package/cjs/interfaces/iam-module-options.interface.js +0 -14
- package/cjs/interfaces/index.js +0 -1
- package/cjs/modules/iam.module.js +50 -102
- package/cjs/services/action.service.js +30 -41
- package/cjs/services/iam-config.service.js +2 -5
- package/cjs/services/{iam-datasource.provider.js → iam-datasource.service.js} +33 -36
- package/cjs/services/index.js +1 -1
- package/cjs/services/permission-cache.service.js +31 -61
- package/cjs/services/permission.service.js +160 -188
- package/cjs/services/role.service.js +8 -8
- package/cjs/types/logic-node.type.js +0 -24
- package/controllers/company-action-permission.controller.d.ts +3 -3
- package/controllers/my-permission.controller.d.ts +2 -2
- package/controllers/role-permission.controller.d.ts +7 -5
- package/controllers/user-action-permission.controller.d.ts +6 -4
- package/dtos/action.dto.d.ts +0 -7
- package/dtos/permission.dto.d.ts +4 -0
- package/dtos/role.dto.d.ts +0 -7
- package/entities/permission-base.entity.d.ts +0 -4
- package/fesm/controllers/action.controller.js +47 -4
- package/fesm/controllers/company-action-permission.controller.js +18 -12
- package/fesm/controllers/index.js +1 -1
- package/fesm/controllers/my-permission.controller.js +7 -3
- package/fesm/controllers/role-permission.controller.js +37 -19
- package/fesm/controllers/role.controller.js +45 -2
- package/fesm/controllers/user-action-permission.controller.js +28 -13
- package/fesm/dtos/action.dto.js +0 -24
- package/fesm/dtos/permission.dto.js +117 -29
- package/fesm/dtos/role.dto.js +0 -24
- package/fesm/entities/permission-base.entity.js +0 -12
- package/fesm/helpers/company-access.helper.js +14 -0
- package/fesm/helpers/index.js +1 -1
- package/fesm/interfaces/iam-module-options.interface.js +3 -1
- package/fesm/interfaces/index.js +0 -1
- package/fesm/modules/iam.module.js +52 -104
- package/fesm/services/action.service.js +32 -43
- package/fesm/services/iam-config.service.js +2 -5
- package/fesm/services/{iam-datasource.provider.js → iam-datasource.service.js} +31 -34
- package/fesm/services/index.js +1 -1
- package/fesm/services/permission-cache.service.js +31 -61
- package/fesm/services/permission.service.js +161 -189
- package/fesm/services/role.service.js +8 -8
- package/fesm/types/logic-node.type.js +1 -10
- package/helpers/company-access.helper.d.ts +3 -0
- package/helpers/index.d.ts +1 -1
- package/interfaces/iam-module-options.interface.d.ts +9 -1
- package/interfaces/index.d.ts +0 -1
- package/modules/iam.module.d.ts +2 -2
- package/package.json +3 -3
- package/services/action.service.d.ts +6 -4
- package/services/iam-config.service.d.ts +2 -2
- package/services/{iam-datasource.provider.d.ts → iam-datasource.service.d.ts} +4 -5
- package/services/index.d.ts +1 -1
- package/services/permission-cache.service.d.ts +4 -6
- package/services/permission.service.d.ts +8 -4
- package/services/role.service.d.ts +3 -3
- package/types/logic-node.type.d.ts +0 -8
- package/cjs/helpers/permission-evaluator.helper.js +0 -175
- package/cjs/interfaces/iam-module-async-options.interface.js +0 -4
- package/fesm/helpers/permission-evaluator.helper.js +0 -165
- package/fesm/interfaces/iam-module-async-options.interface.js +0 -3
- package/helpers/permission-evaluator.helper.d.ts +0 -26
- package/interfaces/iam-module-async-options.interface.d.ts +0 -11
|
@@ -262,10 +262,18 @@ _ts_decorate([
|
|
|
262
262
|
], AssignUserRolesDto.prototype, "items", void 0);
|
|
263
263
|
let GetUserActionsDto = class GetUserActionsDto {
|
|
264
264
|
constructor(){
|
|
265
|
+
_define_property(this, "userId", void 0);
|
|
265
266
|
_define_property(this, "companyId", void 0);
|
|
266
267
|
_define_property(this, "branchId", void 0);
|
|
267
268
|
}
|
|
268
269
|
};
|
|
270
|
+
_ts_decorate([
|
|
271
|
+
(0, _swagger.ApiProperty)({
|
|
272
|
+
description: 'User ID to get actions for'
|
|
273
|
+
}),
|
|
274
|
+
(0, _classvalidator.IsUUID)(),
|
|
275
|
+
_ts_metadata("design:type", String)
|
|
276
|
+
], GetUserActionsDto.prototype, "userId", void 0);
|
|
269
277
|
_ts_decorate([
|
|
270
278
|
(0, _swagger.ApiPropertyOptional)({
|
|
271
279
|
description: 'Company ID (ignored when enableCompanyFeature is false)'
|
|
@@ -283,15 +291,43 @@ _ts_decorate([
|
|
|
283
291
|
_ts_metadata("design:type", String)
|
|
284
292
|
], GetUserActionsDto.prototype, "branchId", void 0);
|
|
285
293
|
let GetRoleActionsDto = class GetRoleActionsDto {
|
|
294
|
+
constructor(){
|
|
295
|
+
_define_property(this, "roleId", void 0);
|
|
296
|
+
}
|
|
286
297
|
};
|
|
298
|
+
_ts_decorate([
|
|
299
|
+
(0, _swagger.ApiProperty)({
|
|
300
|
+
description: 'Role ID to get actions for'
|
|
301
|
+
}),
|
|
302
|
+
(0, _classvalidator.IsUUID)(),
|
|
303
|
+
_ts_metadata("design:type", String)
|
|
304
|
+
], GetRoleActionsDto.prototype, "roleId", void 0);
|
|
287
305
|
let GetCompanyActionsDto = class GetCompanyActionsDto {
|
|
306
|
+
constructor(){
|
|
307
|
+
_define_property(this, "companyId", void 0);
|
|
308
|
+
}
|
|
288
309
|
};
|
|
310
|
+
_ts_decorate([
|
|
311
|
+
(0, _swagger.ApiProperty)({
|
|
312
|
+
description: 'Company ID to get actions for'
|
|
313
|
+
}),
|
|
314
|
+
(0, _classvalidator.IsUUID)(),
|
|
315
|
+
_ts_metadata("design:type", String)
|
|
316
|
+
], GetCompanyActionsDto.prototype, "companyId", void 0);
|
|
289
317
|
let GetUserRolesDto = class GetUserRolesDto {
|
|
290
318
|
constructor(){
|
|
319
|
+
_define_property(this, "userId", void 0);
|
|
291
320
|
_define_property(this, "companyId", void 0);
|
|
292
321
|
_define_property(this, "branchId", void 0);
|
|
293
322
|
}
|
|
294
323
|
};
|
|
324
|
+
_ts_decorate([
|
|
325
|
+
(0, _swagger.ApiProperty)({
|
|
326
|
+
description: 'User ID to get roles for'
|
|
327
|
+
}),
|
|
328
|
+
(0, _classvalidator.IsUUID)(),
|
|
329
|
+
_ts_metadata("design:type", String)
|
|
330
|
+
], GetUserRolesDto.prototype, "userId", void 0);
|
|
295
331
|
_ts_decorate([
|
|
296
332
|
(0, _swagger.ApiPropertyOptional)({
|
|
297
333
|
description: 'Company ID (ignored when enableCompanyFeature is false)'
|
|
@@ -320,31 +356,45 @@ let UserActionResponseDto = class UserActionResponseDto {
|
|
|
320
356
|
}
|
|
321
357
|
};
|
|
322
358
|
_ts_decorate([
|
|
323
|
-
(0, _swagger.ApiProperty)(
|
|
359
|
+
(0, _swagger.ApiProperty)({
|
|
360
|
+
description: 'Permission ID'
|
|
361
|
+
}),
|
|
324
362
|
_ts_metadata("design:type", String)
|
|
325
363
|
], UserActionResponseDto.prototype, "id", void 0);
|
|
326
364
|
_ts_decorate([
|
|
327
|
-
(0, _swagger.ApiProperty)(
|
|
365
|
+
(0, _swagger.ApiProperty)({
|
|
366
|
+
description: 'User ID'
|
|
367
|
+
}),
|
|
328
368
|
_ts_metadata("design:type", String)
|
|
329
369
|
], UserActionResponseDto.prototype, "userId", void 0);
|
|
330
370
|
_ts_decorate([
|
|
331
|
-
(0, _swagger.ApiProperty)(
|
|
371
|
+
(0, _swagger.ApiProperty)({
|
|
372
|
+
description: 'Action ID'
|
|
373
|
+
}),
|
|
332
374
|
_ts_metadata("design:type", String)
|
|
333
375
|
], UserActionResponseDto.prototype, "actionId", void 0);
|
|
334
376
|
_ts_decorate([
|
|
335
|
-
(0, _swagger.ApiProperty)(
|
|
377
|
+
(0, _swagger.ApiProperty)({
|
|
378
|
+
description: 'Action code'
|
|
379
|
+
}),
|
|
336
380
|
_ts_metadata("design:type", String)
|
|
337
381
|
], UserActionResponseDto.prototype, "actionCode", void 0);
|
|
338
382
|
_ts_decorate([
|
|
339
|
-
(0, _swagger.ApiProperty)(
|
|
383
|
+
(0, _swagger.ApiProperty)({
|
|
384
|
+
description: 'Action name'
|
|
385
|
+
}),
|
|
340
386
|
_ts_metadata("design:type", String)
|
|
341
387
|
], UserActionResponseDto.prototype, "actionName", void 0);
|
|
342
388
|
_ts_decorate([
|
|
343
|
-
(0, _swagger.ApiPropertyOptional)(
|
|
389
|
+
(0, _swagger.ApiPropertyOptional)({
|
|
390
|
+
description: 'Branch ID (null = company-wide)'
|
|
391
|
+
}),
|
|
344
392
|
_ts_metadata("design:type", Object)
|
|
345
393
|
], UserActionResponseDto.prototype, "branchId", void 0);
|
|
346
394
|
_ts_decorate([
|
|
347
|
-
(0, _swagger.ApiProperty)(
|
|
395
|
+
(0, _swagger.ApiProperty)({
|
|
396
|
+
description: 'When this permission was created'
|
|
397
|
+
}),
|
|
348
398
|
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
349
399
|
], UserActionResponseDto.prototype, "createdAt", void 0);
|
|
350
400
|
let RoleActionResponseDto = class RoleActionResponseDto {
|
|
@@ -358,27 +408,39 @@ let RoleActionResponseDto = class RoleActionResponseDto {
|
|
|
358
408
|
}
|
|
359
409
|
};
|
|
360
410
|
_ts_decorate([
|
|
361
|
-
(0, _swagger.ApiProperty)(
|
|
411
|
+
(0, _swagger.ApiProperty)({
|
|
412
|
+
description: 'Permission ID'
|
|
413
|
+
}),
|
|
362
414
|
_ts_metadata("design:type", String)
|
|
363
415
|
], RoleActionResponseDto.prototype, "id", void 0);
|
|
364
416
|
_ts_decorate([
|
|
365
|
-
(0, _swagger.ApiProperty)(
|
|
417
|
+
(0, _swagger.ApiProperty)({
|
|
418
|
+
description: 'Role ID'
|
|
419
|
+
}),
|
|
366
420
|
_ts_metadata("design:type", String)
|
|
367
421
|
], RoleActionResponseDto.prototype, "roleId", void 0);
|
|
368
422
|
_ts_decorate([
|
|
369
|
-
(0, _swagger.ApiProperty)(
|
|
423
|
+
(0, _swagger.ApiProperty)({
|
|
424
|
+
description: 'Action ID'
|
|
425
|
+
}),
|
|
370
426
|
_ts_metadata("design:type", String)
|
|
371
427
|
], RoleActionResponseDto.prototype, "actionId", void 0);
|
|
372
428
|
_ts_decorate([
|
|
373
|
-
(0, _swagger.ApiProperty)(
|
|
429
|
+
(0, _swagger.ApiProperty)({
|
|
430
|
+
description: 'Action code'
|
|
431
|
+
}),
|
|
374
432
|
_ts_metadata("design:type", String)
|
|
375
433
|
], RoleActionResponseDto.prototype, "actionCode", void 0);
|
|
376
434
|
_ts_decorate([
|
|
377
|
-
(0, _swagger.ApiProperty)(
|
|
435
|
+
(0, _swagger.ApiProperty)({
|
|
436
|
+
description: 'Action name'
|
|
437
|
+
}),
|
|
378
438
|
_ts_metadata("design:type", String)
|
|
379
439
|
], RoleActionResponseDto.prototype, "actionName", void 0);
|
|
380
440
|
_ts_decorate([
|
|
381
|
-
(0, _swagger.ApiProperty)(
|
|
441
|
+
(0, _swagger.ApiProperty)({
|
|
442
|
+
description: 'When this permission was created'
|
|
443
|
+
}),
|
|
382
444
|
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
383
445
|
], RoleActionResponseDto.prototype, "createdAt", void 0);
|
|
384
446
|
let CompanyActionResponseDto = class CompanyActionResponseDto {
|
|
@@ -438,27 +500,39 @@ let UserRoleResponseDto = class UserRoleResponseDto {
|
|
|
438
500
|
}
|
|
439
501
|
};
|
|
440
502
|
_ts_decorate([
|
|
441
|
-
(0, _swagger.ApiProperty)(
|
|
503
|
+
(0, _swagger.ApiProperty)({
|
|
504
|
+
description: 'Permission ID'
|
|
505
|
+
}),
|
|
442
506
|
_ts_metadata("design:type", String)
|
|
443
507
|
], UserRoleResponseDto.prototype, "id", void 0);
|
|
444
508
|
_ts_decorate([
|
|
445
|
-
(0, _swagger.ApiProperty)(
|
|
509
|
+
(0, _swagger.ApiProperty)({
|
|
510
|
+
description: 'User ID'
|
|
511
|
+
}),
|
|
446
512
|
_ts_metadata("design:type", String)
|
|
447
513
|
], UserRoleResponseDto.prototype, "userId", void 0);
|
|
448
514
|
_ts_decorate([
|
|
449
|
-
(0, _swagger.ApiProperty)(
|
|
515
|
+
(0, _swagger.ApiProperty)({
|
|
516
|
+
description: 'Role ID'
|
|
517
|
+
}),
|
|
450
518
|
_ts_metadata("design:type", String)
|
|
451
519
|
], UserRoleResponseDto.prototype, "roleId", void 0);
|
|
452
520
|
_ts_decorate([
|
|
453
|
-
(0, _swagger.ApiProperty)(
|
|
521
|
+
(0, _swagger.ApiProperty)({
|
|
522
|
+
description: 'Role name'
|
|
523
|
+
}),
|
|
454
524
|
_ts_metadata("design:type", String)
|
|
455
525
|
], UserRoleResponseDto.prototype, "roleName", void 0);
|
|
456
526
|
_ts_decorate([
|
|
457
|
-
(0, _swagger.ApiPropertyOptional)(
|
|
527
|
+
(0, _swagger.ApiPropertyOptional)({
|
|
528
|
+
description: 'Branch ID (null = company-wide)'
|
|
529
|
+
}),
|
|
458
530
|
_ts_metadata("design:type", Object)
|
|
459
531
|
], UserRoleResponseDto.prototype, "branchId", void 0);
|
|
460
532
|
_ts_decorate([
|
|
461
|
-
(0, _swagger.ApiProperty)(
|
|
533
|
+
(0, _swagger.ApiProperty)({
|
|
534
|
+
description: 'When this permission was created'
|
|
535
|
+
}),
|
|
462
536
|
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
463
537
|
], UserRoleResponseDto.prototype, "createdAt", void 0);
|
|
464
538
|
let FrontendActionDto = class FrontendActionDto {
|
|
@@ -470,19 +544,27 @@ let FrontendActionDto = class FrontendActionDto {
|
|
|
470
544
|
}
|
|
471
545
|
};
|
|
472
546
|
_ts_decorate([
|
|
473
|
-
(0, _swagger.ApiProperty)(
|
|
547
|
+
(0, _swagger.ApiProperty)({
|
|
548
|
+
description: 'Action ID'
|
|
549
|
+
}),
|
|
474
550
|
_ts_metadata("design:type", String)
|
|
475
551
|
], FrontendActionDto.prototype, "id", void 0);
|
|
476
552
|
_ts_decorate([
|
|
477
|
-
(0, _swagger.ApiProperty)(
|
|
553
|
+
(0, _swagger.ApiProperty)({
|
|
554
|
+
description: 'Action code'
|
|
555
|
+
}),
|
|
478
556
|
_ts_metadata("design:type", String)
|
|
479
557
|
], FrontendActionDto.prototype, "code", void 0);
|
|
480
558
|
_ts_decorate([
|
|
481
|
-
(0, _swagger.ApiProperty)(
|
|
559
|
+
(0, _swagger.ApiProperty)({
|
|
560
|
+
description: 'Action name'
|
|
561
|
+
}),
|
|
482
562
|
_ts_metadata("design:type", String)
|
|
483
563
|
], FrontendActionDto.prototype, "name", void 0);
|
|
484
564
|
_ts_decorate([
|
|
485
|
-
(0, _swagger.ApiPropertyOptional)(
|
|
565
|
+
(0, _swagger.ApiPropertyOptional)({
|
|
566
|
+
description: 'Action description'
|
|
567
|
+
}),
|
|
486
568
|
_ts_metadata("design:type", Object)
|
|
487
569
|
], FrontendActionDto.prototype, "description", void 0);
|
|
488
570
|
let MyPermissionsQueryDto = class MyPermissionsQueryDto {
|
|
@@ -537,18 +619,26 @@ let PermissionOperationResultDto = class PermissionOperationResultDto {
|
|
|
537
619
|
}
|
|
538
620
|
};
|
|
539
621
|
_ts_decorate([
|
|
540
|
-
(0, _swagger.ApiProperty)(
|
|
622
|
+
(0, _swagger.ApiProperty)({
|
|
623
|
+
description: 'Whether the operation succeeded'
|
|
624
|
+
}),
|
|
541
625
|
_ts_metadata("design:type", Boolean)
|
|
542
626
|
], PermissionOperationResultDto.prototype, "success", void 0);
|
|
543
627
|
_ts_decorate([
|
|
544
|
-
(0, _swagger.ApiProperty)(
|
|
628
|
+
(0, _swagger.ApiProperty)({
|
|
629
|
+
description: 'Number of permissions added'
|
|
630
|
+
}),
|
|
545
631
|
_ts_metadata("design:type", Number)
|
|
546
632
|
], PermissionOperationResultDto.prototype, "added", void 0);
|
|
547
633
|
_ts_decorate([
|
|
548
|
-
(0, _swagger.ApiProperty)(
|
|
634
|
+
(0, _swagger.ApiProperty)({
|
|
635
|
+
description: 'Number of permissions removed'
|
|
636
|
+
}),
|
|
549
637
|
_ts_metadata("design:type", Number)
|
|
550
638
|
], PermissionOperationResultDto.prototype, "removed", void 0);
|
|
551
639
|
_ts_decorate([
|
|
552
|
-
(0, _swagger.ApiProperty)(
|
|
640
|
+
(0, _swagger.ApiProperty)({
|
|
641
|
+
description: 'Operation result message'
|
|
642
|
+
}),
|
|
553
643
|
_ts_metadata("design:type", String)
|
|
554
644
|
], PermissionOperationResultDto.prototype, "message", void 0);
|
package/cjs/dtos/role.dto.js
CHANGED
|
@@ -12,9 +12,6 @@ _export(exports, {
|
|
|
12
12
|
get CreateRoleDto () {
|
|
13
13
|
return CreateRoleDto;
|
|
14
14
|
},
|
|
15
|
-
get RoleQueryDto () {
|
|
16
|
-
return RoleQueryDto;
|
|
17
|
-
},
|
|
18
15
|
get RoleResponseDto () {
|
|
19
16
|
return RoleResponseDto;
|
|
20
17
|
},
|
|
@@ -128,30 +125,6 @@ _ts_decorate([
|
|
|
128
125
|
(0, _classvalidator.IsNotEmpty)(),
|
|
129
126
|
_ts_metadata("design:type", String)
|
|
130
127
|
], UpdateRoleDto.prototype, "id", void 0);
|
|
131
|
-
let RoleQueryDto = class RoleQueryDto {
|
|
132
|
-
constructor(){
|
|
133
|
-
_define_property(this, "companyId", void 0);
|
|
134
|
-
_define_property(this, "isActive", void 0);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
_ts_decorate([
|
|
138
|
-
(0, _swagger.ApiProperty)({
|
|
139
|
-
description: 'Filter by company ID - Only available when company feature is enabled',
|
|
140
|
-
required: false
|
|
141
|
-
}),
|
|
142
|
-
(0, _classvalidator.IsUUID)(),
|
|
143
|
-
(0, _classvalidator.IsOptional)(),
|
|
144
|
-
_ts_metadata("design:type", String)
|
|
145
|
-
], RoleQueryDto.prototype, "companyId", void 0);
|
|
146
|
-
_ts_decorate([
|
|
147
|
-
(0, _swagger.ApiProperty)({
|
|
148
|
-
description: 'Filter by active status',
|
|
149
|
-
required: false
|
|
150
|
-
}),
|
|
151
|
-
(0, _classvalidator.IsBoolean)(),
|
|
152
|
-
(0, _classvalidator.IsOptional)(),
|
|
153
|
-
_ts_metadata("design:type", Boolean)
|
|
154
|
-
], RoleQueryDto.prototype, "isActive", void 0);
|
|
155
128
|
let RoleResponseDto = class RoleResponseDto {
|
|
156
129
|
constructor(){
|
|
157
130
|
_define_property(this, "id", void 0);
|
|
@@ -58,18 +58,6 @@ var IamEntityType = /*#__PURE__*/ function(IamEntityType) {
|
|
|
58
58
|
return IamEntityType;
|
|
59
59
|
}({});
|
|
60
60
|
let PermissionBase = class PermissionBase extends _nestjsshared.Identity {
|
|
61
|
-
isUserRole() {
|
|
62
|
-
return this.permissionType === "user_role";
|
|
63
|
-
}
|
|
64
|
-
isRoleAction() {
|
|
65
|
-
return this.permissionType === "role_action";
|
|
66
|
-
}
|
|
67
|
-
isUserAction() {
|
|
68
|
-
return this.permissionType === "user_action";
|
|
69
|
-
}
|
|
70
|
-
isCompanyAction() {
|
|
71
|
-
return this.permissionType === "company_action";
|
|
72
|
-
}
|
|
73
61
|
isValid(now = new Date()) {
|
|
74
62
|
if (this.validFrom && now < this.validFrom) return false;
|
|
75
63
|
if (this.validUntil && now > this.validUntil) return false;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "validateCompanyAccess", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return validateCompanyAccess;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
function validateCompanyAccess(config, companyId, user, errorMessage = 'You do not have access to this company') {
|
|
13
|
+
if (!config.isCompanyFeatureEnabled() || !companyId) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (user.companyId !== companyId) {
|
|
17
|
+
throw new _common.ForbiddenException(errorMessage);
|
|
18
|
+
}
|
|
19
|
+
}
|
package/cjs/helpers/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
_export_star(require("./
|
|
5
|
+
_export_star(require("./company-access.helper"), exports);
|
|
6
6
|
_export_star(require("./permission-mode.helper"), exports);
|
|
7
7
|
function _export_star(from, to) {
|
|
8
8
|
Object.keys(from).forEach(function(k) {
|
|
@@ -2,17 +2,3 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
_export_star(require("./iam-module-async-options.interface"), exports);
|
|
6
|
-
function _export_star(from, to) {
|
|
7
|
-
Object.keys(from).forEach(function(k) {
|
|
8
|
-
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
9
|
-
Object.defineProperty(to, k, {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: function() {
|
|
12
|
-
return from[k];
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
return from;
|
|
18
|
-
}
|
package/cjs/interfaces/index.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
_export_star(require("./action.interface"), exports);
|
|
6
6
|
_export_star(require("./role.interface"), exports);
|
|
7
7
|
_export_star(require("./iam-module-options.interface"), exports);
|
|
8
|
-
_export_star(require("./iam-module-async-options.interface"), exports);
|
|
9
8
|
function _export_star(from, to) {
|
|
10
9
|
Object.keys(from).forEach(function(k) {
|
|
11
10
|
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
@@ -8,17 +8,16 @@ Object.defineProperty(exports, "IAMModule", {
|
|
|
8
8
|
return IAMModule;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
const _nestjsshared = require("@flusys/nestjs-shared");
|
|
11
12
|
const _modules = require("@flusys/nestjs-shared/modules");
|
|
12
13
|
const _common = require("@nestjs/common");
|
|
13
|
-
const _typeorm = require("@nestjs/typeorm");
|
|
14
14
|
const _iamconstants = require("../config/iam.constants");
|
|
15
15
|
const _controllers = require("../controllers");
|
|
16
|
-
const _entities = require("../entities");
|
|
17
16
|
const _permissiontypeenum = require("../enums/permission-type.enum");
|
|
18
17
|
const _helpers = require("../helpers");
|
|
19
18
|
const _services = require("../services");
|
|
20
19
|
const _iamconfigservice = require("../services/iam-config.service");
|
|
21
|
-
const
|
|
20
|
+
const _iamdatasourceservice = require("../services/iam-datasource.service");
|
|
22
21
|
const _permissioncacheservice = require("../services/permission-cache.service");
|
|
23
22
|
function _ts_decorate(decorators, target, key, desc) {
|
|
24
23
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -53,33 +52,11 @@ let IAMModule = class IAMModule {
|
|
|
53
52
|
}
|
|
54
53
|
return baseControllers;
|
|
55
54
|
}
|
|
56
|
-
static getEntities(permissionMode, enableCompanyFeature) {
|
|
57
|
-
// Core entities
|
|
58
|
-
const entities = [];
|
|
59
|
-
// Action entity - always included
|
|
60
|
-
entities.push(_entities.Action);
|
|
61
|
-
// Permission entity is always needed
|
|
62
|
-
if (enableCompanyFeature) {
|
|
63
|
-
entities.push(_entities.UserIamPermissionWithCompany);
|
|
64
|
-
} else {
|
|
65
|
-
entities.push(_entities.UserIamPermission);
|
|
66
|
-
}
|
|
67
|
-
// Role entity - Only for RBAC or FULL mode
|
|
68
|
-
if (permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL) {
|
|
69
|
-
if (enableCompanyFeature) {
|
|
70
|
-
entities.push(_entities.RoleWithCompany);
|
|
71
|
-
} else {
|
|
72
|
-
entities.push(_entities.Role);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return entities;
|
|
76
|
-
}
|
|
77
55
|
static getServices(permissionMode) {
|
|
78
56
|
const services = [
|
|
79
57
|
_services.ActionService,
|
|
80
58
|
_services.PermissionService,
|
|
81
|
-
_permissioncacheservice.PermissionCacheService
|
|
82
|
-
_helpers.PermissionEvaluatorHelper
|
|
59
|
+
_permissioncacheservice.PermissionCacheService
|
|
83
60
|
];
|
|
84
61
|
// RoleService - Only for RBAC or FULL mode
|
|
85
62
|
if (permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL) {
|
|
@@ -87,30 +64,32 @@ let IAMModule = class IAMModule {
|
|
|
87
64
|
}
|
|
88
65
|
return services;
|
|
89
66
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
67
|
+
static getPermissionGuardConfigProvider(enableCompanyFeature) {
|
|
68
|
+
return {
|
|
69
|
+
provide: _nestjsshared.PERMISSION_GUARD_CONFIG,
|
|
70
|
+
useValue: {
|
|
71
|
+
enableCompanyFeature
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
static getExports(permissionMode) {
|
|
76
|
+
const baseExports = [
|
|
77
|
+
_iamconfigservice.IAMConfigService,
|
|
78
|
+
_iamdatasourceservice.IAMDataSourceService,
|
|
79
|
+
_services.ActionService,
|
|
80
|
+
_services.PermissionService,
|
|
81
|
+
_permissioncacheservice.PermissionCacheService,
|
|
82
|
+
_nestjsshared.PERMISSION_GUARD_CONFIG
|
|
83
|
+
];
|
|
84
|
+
if (permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL) {
|
|
85
|
+
baseExports.push(_services.RoleService);
|
|
86
|
+
}
|
|
87
|
+
return baseExports;
|
|
105
88
|
}
|
|
106
89
|
static forRoot(options = {}) {
|
|
107
90
|
const { global = false, includeController = false } = options;
|
|
108
|
-
const databaseMode = options.bootstrapAppConfig?.databaseMode;
|
|
109
91
|
const enableCompanyFeature = options.bootstrapAppConfig?.enableCompanyFeature ?? false;
|
|
110
|
-
// Read permissionMode from bootstrap config using helper
|
|
111
92
|
const permissionMode = _helpers.PermissionModeHelper.fromString(options.bootstrapAppConfig?.permissionMode);
|
|
112
|
-
const isMultiTenant = databaseMode === 'multi-tenant';
|
|
113
|
-
const entities = this.getEntities(permissionMode, enableCompanyFeature);
|
|
114
93
|
const controllers = includeController ? this.getControllers(permissionMode, enableCompanyFeature) : [];
|
|
115
94
|
const providers = [
|
|
116
95
|
{
|
|
@@ -118,83 +97,52 @@ let IAMModule = class IAMModule {
|
|
|
118
97
|
useValue: options
|
|
119
98
|
},
|
|
120
99
|
_iamconfigservice.IAMConfigService,
|
|
121
|
-
|
|
122
|
-
...this.getServices(permissionMode)
|
|
123
|
-
|
|
124
|
-
const imports = [
|
|
125
|
-
_modules.CacheModule,
|
|
126
|
-
_modules.UtilsModule
|
|
100
|
+
_iamdatasourceservice.IAMDataSourceService,
|
|
101
|
+
...this.getServices(permissionMode),
|
|
102
|
+
this.getPermissionGuardConfigProvider(enableCompanyFeature)
|
|
127
103
|
];
|
|
128
104
|
const module = {
|
|
129
105
|
module: IAMModule,
|
|
130
|
-
imports
|
|
106
|
+
imports: [
|
|
107
|
+
_modules.CacheModule,
|
|
108
|
+
_modules.UtilsModule
|
|
109
|
+
],
|
|
131
110
|
controllers,
|
|
132
111
|
providers,
|
|
133
|
-
exports:
|
|
134
|
-
_iamconfigservice.IAMConfigService,
|
|
135
|
-
_iamdatasourceprovider.IAMDataSourceProvider,
|
|
136
|
-
_services.ActionService,
|
|
137
|
-
_services.PermissionService,
|
|
138
|
-
_permissioncacheservice.PermissionCacheService,
|
|
139
|
-
_helpers.PermissionEvaluatorHelper,
|
|
140
|
-
...permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL ? [
|
|
141
|
-
_services.RoleService
|
|
142
|
-
] : []
|
|
143
|
-
]
|
|
112
|
+
exports: this.getExports(permissionMode)
|
|
144
113
|
};
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
return module;
|
|
114
|
+
return global ? {
|
|
115
|
+
...module,
|
|
116
|
+
global: true
|
|
117
|
+
} : module;
|
|
152
118
|
}
|
|
153
119
|
static forRootAsync(asyncOptions) {
|
|
154
120
|
const { global = false, includeController = false, imports: externalImports = [] } = asyncOptions;
|
|
155
|
-
const databaseMode = asyncOptions.bootstrapAppConfig?.databaseMode;
|
|
156
121
|
const enableCompanyFeature = asyncOptions.bootstrapAppConfig?.enableCompanyFeature ?? false;
|
|
157
|
-
// Read permissionMode from bootstrap config using helper
|
|
158
122
|
const permissionMode = _helpers.PermissionModeHelper.fromString(asyncOptions.bootstrapAppConfig?.permissionMode);
|
|
159
|
-
const isMultiTenant = databaseMode === 'multi-tenant';
|
|
160
|
-
const entities = this.getEntities(permissionMode, enableCompanyFeature);
|
|
161
123
|
const controllers = includeController ? this.getControllers(permissionMode, enableCompanyFeature) : [];
|
|
162
|
-
const asyncProviders = this.createAsyncProviders(asyncOptions);
|
|
163
124
|
const providers = [
|
|
164
|
-
...
|
|
125
|
+
...this.createAsyncProviders(asyncOptions),
|
|
165
126
|
_iamconfigservice.IAMConfigService,
|
|
166
|
-
|
|
167
|
-
...this.getServices(permissionMode)
|
|
168
|
-
|
|
169
|
-
const imports = [
|
|
170
|
-
...externalImports,
|
|
171
|
-
_modules.CacheModule,
|
|
172
|
-
_modules.UtilsModule
|
|
127
|
+
_iamdatasourceservice.IAMDataSourceService,
|
|
128
|
+
...this.getServices(permissionMode),
|
|
129
|
+
this.getPermissionGuardConfigProvider(enableCompanyFeature)
|
|
173
130
|
];
|
|
174
131
|
const module = {
|
|
175
132
|
module: IAMModule,
|
|
176
|
-
imports
|
|
133
|
+
imports: [
|
|
134
|
+
...externalImports,
|
|
135
|
+
_modules.CacheModule,
|
|
136
|
+
_modules.UtilsModule
|
|
137
|
+
],
|
|
177
138
|
controllers,
|
|
178
139
|
providers,
|
|
179
|
-
exports:
|
|
180
|
-
_iamconfigservice.IAMConfigService,
|
|
181
|
-
_iamdatasourceprovider.IAMDataSourceProvider,
|
|
182
|
-
_services.ActionService,
|
|
183
|
-
_services.PermissionService,
|
|
184
|
-
_permissioncacheservice.PermissionCacheService,
|
|
185
|
-
_helpers.PermissionEvaluatorHelper,
|
|
186
|
-
...permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL ? [
|
|
187
|
-
_services.RoleService
|
|
188
|
-
] : []
|
|
189
|
-
]
|
|
140
|
+
exports: this.getExports(permissionMode)
|
|
190
141
|
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
return module;
|
|
142
|
+
return global ? {
|
|
143
|
+
...module,
|
|
144
|
+
global: true
|
|
145
|
+
} : module;
|
|
198
146
|
}
|
|
199
147
|
static createAsyncProviders(options) {
|
|
200
148
|
if (options.useExisting || options.useFactory) {
|