@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.
Files changed (76) hide show
  1. package/README.md +285 -115
  2. package/cjs/controllers/action.controller.js +45 -2
  3. package/cjs/controllers/company-action-permission.controller.js +16 -10
  4. package/cjs/controllers/my-permission.controller.js +7 -3
  5. package/cjs/controllers/role-permission.controller.js +35 -17
  6. package/cjs/controllers/role.controller.js +46 -3
  7. package/cjs/controllers/user-action-permission.controller.js +26 -11
  8. package/cjs/dtos/action.dto.js +0 -27
  9. package/cjs/dtos/permission.dto.js +117 -27
  10. package/cjs/dtos/role.dto.js +0 -27
  11. package/cjs/entities/permission-base.entity.js +0 -12
  12. package/cjs/helpers/company-access.helper.js +19 -0
  13. package/cjs/helpers/index.js +1 -1
  14. package/cjs/interfaces/iam-module-options.interface.js +0 -14
  15. package/cjs/interfaces/index.js +0 -1
  16. package/cjs/modules/iam.module.js +50 -102
  17. package/cjs/services/action.service.js +30 -41
  18. package/cjs/services/iam-config.service.js +2 -5
  19. package/cjs/services/{iam-datasource.provider.js → iam-datasource.service.js} +33 -36
  20. package/cjs/services/index.js +1 -1
  21. package/cjs/services/permission-cache.service.js +31 -61
  22. package/cjs/services/permission.service.js +160 -188
  23. package/cjs/services/role.service.js +8 -8
  24. package/cjs/types/logic-node.type.js +0 -24
  25. package/controllers/company-action-permission.controller.d.ts +3 -3
  26. package/controllers/my-permission.controller.d.ts +2 -2
  27. package/controllers/role-permission.controller.d.ts +7 -5
  28. package/controllers/user-action-permission.controller.d.ts +6 -4
  29. package/dtos/action.dto.d.ts +0 -7
  30. package/dtos/permission.dto.d.ts +4 -0
  31. package/dtos/role.dto.d.ts +0 -7
  32. package/entities/permission-base.entity.d.ts +0 -4
  33. package/fesm/controllers/action.controller.js +47 -4
  34. package/fesm/controllers/company-action-permission.controller.js +18 -12
  35. package/fesm/controllers/index.js +1 -1
  36. package/fesm/controllers/my-permission.controller.js +7 -3
  37. package/fesm/controllers/role-permission.controller.js +37 -19
  38. package/fesm/controllers/role.controller.js +45 -2
  39. package/fesm/controllers/user-action-permission.controller.js +28 -13
  40. package/fesm/dtos/action.dto.js +0 -24
  41. package/fesm/dtos/permission.dto.js +117 -29
  42. package/fesm/dtos/role.dto.js +0 -24
  43. package/fesm/entities/permission-base.entity.js +0 -12
  44. package/fesm/helpers/company-access.helper.js +14 -0
  45. package/fesm/helpers/index.js +1 -1
  46. package/fesm/interfaces/iam-module-options.interface.js +3 -1
  47. package/fesm/interfaces/index.js +0 -1
  48. package/fesm/modules/iam.module.js +52 -104
  49. package/fesm/services/action.service.js +32 -43
  50. package/fesm/services/iam-config.service.js +2 -5
  51. package/fesm/services/{iam-datasource.provider.js → iam-datasource.service.js} +31 -34
  52. package/fesm/services/index.js +1 -1
  53. package/fesm/services/permission-cache.service.js +31 -61
  54. package/fesm/services/permission.service.js +161 -189
  55. package/fesm/services/role.service.js +8 -8
  56. package/fesm/types/logic-node.type.js +1 -10
  57. package/helpers/company-access.helper.d.ts +3 -0
  58. package/helpers/index.d.ts +1 -1
  59. package/interfaces/iam-module-options.interface.d.ts +9 -1
  60. package/interfaces/index.d.ts +0 -1
  61. package/modules/iam.module.d.ts +2 -2
  62. package/package.json +3 -3
  63. package/services/action.service.d.ts +6 -4
  64. package/services/iam-config.service.d.ts +2 -2
  65. package/services/{iam-datasource.provider.d.ts → iam-datasource.service.d.ts} +4 -5
  66. package/services/index.d.ts +1 -1
  67. package/services/permission-cache.service.d.ts +4 -6
  68. package/services/permission.service.d.ts +8 -4
  69. package/services/role.service.d.ts +3 -3
  70. package/types/logic-node.type.d.ts +0 -8
  71. package/cjs/helpers/permission-evaluator.helper.js +0 -175
  72. package/cjs/interfaces/iam-module-async-options.interface.js +0 -4
  73. package/fesm/helpers/permission-evaluator.helper.js +0 -165
  74. package/fesm/interfaces/iam-module-async-options.interface.js +0 -3
  75. package/helpers/permission-evaluator.helper.d.ts +0 -26
  76. 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);
@@ -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
+ }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- _export_star(require("./permission-evaluator.helper"), exports);
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
- }
@@ -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 _iamdatasourceprovider = require("../services/iam-datasource.provider");
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
- * Create repository providers that use IAMDataSourceProvider
92
- * This replaces TypeOrmModule.forFeature() functionality
93
- */ static getRepositoryProviders(permissionMode, enableCompanyFeature) {
94
- const entities = this.getEntities(permissionMode, enableCompanyFeature);
95
- return entities.map((entity)=>({
96
- provide: (0, _typeorm.getRepositoryToken)(entity),
97
- scope: _common.Scope.REQUEST,
98
- useFactory: async (dataSourceProvider)=>{
99
- return await dataSourceProvider.getRepository(entity);
100
- },
101
- inject: [
102
- _iamdatasourceprovider.IAMDataSourceProvider
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
- _iamdatasourceprovider.IAMDataSourceProvider,
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
- if (global) {
146
- return {
147
- ...module,
148
- global: true
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
- ...asyncProviders,
125
+ ...this.createAsyncProviders(asyncOptions),
165
126
  _iamconfigservice.IAMConfigService,
166
- _iamdatasourceprovider.IAMDataSourceProvider,
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
- if (global) {
192
- return {
193
- ...module,
194
- global: true
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) {