@flusys/nestjs-iam 4.1.1 → 5.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 (45) hide show
  1. package/README.md +87 -369
  2. package/cjs/config/message-keys.js +7 -49
  3. package/cjs/controllers/company-action-permission.controller.js +19 -18
  4. package/cjs/controllers/my-permission.controller.js +1 -4
  5. package/cjs/controllers/role-permission.controller.js +30 -20
  6. package/cjs/controllers/user-action-permission.controller.js +16 -11
  7. package/cjs/docs/iam-swagger.config.js +3 -2
  8. package/cjs/dtos/action.dto.js +0 -16
  9. package/cjs/dtos/permission.dto.js +4 -19
  10. package/cjs/dtos/role.dto.js +0 -16
  11. package/cjs/entities/action-base.entity.js +3 -8
  12. package/cjs/entities/permission-base.entity.js +1 -7
  13. package/cjs/entities/role-base.entity.js +1 -7
  14. package/cjs/services/action.service.js +1 -2
  15. package/cjs/services/permission.service.js +7 -14
  16. package/cjs/services/role.service.js +0 -1
  17. package/config/message-keys.d.ts +4 -84
  18. package/controllers/company-action-permission.controller.d.ts +3 -3
  19. package/controllers/role-permission.controller.d.ts +4 -4
  20. package/controllers/user-action-permission.controller.d.ts +3 -3
  21. package/docs/iam-swagger.config.d.ts +1 -1
  22. package/dtos/action.dto.d.ts +0 -2
  23. package/dtos/permission.dto.d.ts +1 -3
  24. package/dtos/role.dto.d.ts +0 -2
  25. package/entities/action-base.entity.d.ts +0 -1
  26. package/entities/permission-base.entity.d.ts +0 -1
  27. package/entities/role-base.entity.d.ts +0 -1
  28. package/fesm/config/message-keys.js +7 -44
  29. package/fesm/controllers/company-action-permission.controller.js +22 -21
  30. package/fesm/controllers/my-permission.controller.js +2 -5
  31. package/fesm/controllers/role-permission.controller.js +33 -23
  32. package/fesm/controllers/user-action-permission.controller.js +19 -14
  33. package/fesm/docs/iam-swagger.config.js +3 -2
  34. package/fesm/dtos/action.dto.js +0 -16
  35. package/fesm/dtos/permission.dto.js +4 -19
  36. package/fesm/dtos/role.dto.js +0 -16
  37. package/fesm/entities/action-base.entity.js +3 -8
  38. package/fesm/entities/permission-base.entity.js +1 -7
  39. package/fesm/entities/role-base.entity.js +1 -7
  40. package/fesm/services/action.service.js +1 -2
  41. package/fesm/services/permission.service.js +7 -14
  42. package/fesm/services/role.service.js +0 -1
  43. package/interfaces/action.interface.d.ts +0 -1
  44. package/interfaces/role.interface.d.ts +0 -1
  45. package/package.json +3 -3
@@ -9,9 +9,9 @@ Object.defineProperty(exports, "CompanyActionPermissionController", {
9
9
  }
10
10
  });
11
11
  const _nestjsshared = require("@flusys/nestjs-shared");
12
- const _config = require("../config");
13
12
  const _common = require("@nestjs/common");
14
13
  const _swagger = require("@nestjs/swagger");
14
+ const _config = require("../config");
15
15
  const _permissiondto = require("../dtos/permission.dto");
16
16
  const _permissionservice = require("../services/permission.service");
17
17
  function _define_property(obj, key, value) {
@@ -42,10 +42,21 @@ function _ts_param(paramIndex, decorator) {
42
42
  };
43
43
  }
44
44
  let CompanyActionPermissionController = class CompanyActionPermissionController {
45
- async assignCompanyActions(dto, user) {
46
- return this.permissionService.assignCompanyActions(dto);
45
+ async assignCompanyActions(dto) {
46
+ const result = await this.permissionService.assignCompanyActions(dto);
47
+ return {
48
+ success: true,
49
+ message: 'Company actions updated successfully',
50
+ messageKey: _config.PERMISSION_OPERATION_MESSAGES.PROCESS_SUCCESS,
51
+ messageVariables: {
52
+ added: result.added,
53
+ removed: result.removed,
54
+ total: result.total
55
+ },
56
+ data: result
57
+ };
47
58
  }
48
- async getCompanyActions(dto, user) {
59
+ async getCompanyActions(dto) {
49
60
  const actions = await this.permissionService.getCompanyActions(dto.companyId);
50
61
  return {
51
62
  success: true,
@@ -66,19 +77,14 @@ _ts_decorate([
66
77
  summary: 'Whitelist actions for company',
67
78
  description: 'Controls which actions are available to company users/roles.'
68
79
  }),
69
- (0, _swagger.ApiResponse)({
70
- status: 200,
71
- type: _permissiondto.PermissionOperationResultDto
72
- }),
80
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.PermissionOperationResultDto),
73
81
  (0, _swagger.ApiBody)({
74
82
  type: _permissiondto.AssignCompanyActionsDto
75
83
  }),
76
84
  _ts_param(0, (0, _common.Body)()),
77
- _ts_param(1, (0, _nestjsshared.CurrentUser)()),
78
85
  _ts_metadata("design:type", Function),
79
86
  _ts_metadata("design:paramtypes", [
80
- typeof _permissiondto.AssignCompanyActionsDto === "undefined" ? Object : _permissiondto.AssignCompanyActionsDto,
81
- typeof _nestjsshared.ILoggedUserInfo === "undefined" ? Object : _nestjsshared.ILoggedUserInfo
87
+ typeof _permissiondto.AssignCompanyActionsDto === "undefined" ? Object : _permissiondto.AssignCompanyActionsDto
82
88
  ]),
83
89
  _ts_metadata("design:returntype", Promise)
84
90
  ], CompanyActionPermissionController.prototype, "assignCompanyActions", null);
@@ -89,19 +95,14 @@ _ts_decorate([
89
95
  summary: 'Get company whitelisted actions',
90
96
  description: 'Returns actions available to company.'
91
97
  }),
92
- (0, _swagger.ApiResponse)({
93
- status: 200,
94
- type: _nestjsshared.SingleResponseDto
95
- }),
98
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.CompanyActionResponseDto, true, 'single'),
96
99
  (0, _swagger.ApiBody)({
97
100
  type: _permissiondto.GetCompanyActionsDto
98
101
  }),
99
102
  _ts_param(0, (0, _common.Body)()),
100
- _ts_param(1, (0, _nestjsshared.CurrentUser)()),
101
103
  _ts_metadata("design:type", Function),
102
104
  _ts_metadata("design:paramtypes", [
103
- typeof _permissiondto.GetCompanyActionsDto === "undefined" ? Object : _permissiondto.GetCompanyActionsDto,
104
- typeof _nestjsshared.ILoggedUserInfo === "undefined" ? Object : _nestjsshared.ILoggedUserInfo
105
+ typeof _permissiondto.GetCompanyActionsDto === "undefined" ? Object : _permissiondto.GetCompanyActionsDto
105
106
  ]),
106
107
  _ts_metadata("design:returntype", Promise)
107
108
  ], CompanyActionPermissionController.prototype, "getCompanyActions", null);
@@ -63,10 +63,7 @@ _ts_decorate([
63
63
  summary: 'Get current user permissions',
64
64
  description: 'Returns complete permissions for authenticated user. Includes menus, frontend actions, and caches endpoint permissions. Optionally filter by parent codes.'
65
65
  }),
66
- (0, _swagger.ApiResponse)({
67
- status: 200,
68
- type: _permissiondto.MyPermissionsResponseDto
69
- }),
66
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.MyPermissionsResponseDto),
70
67
  (0, _swagger.ApiResponse)({
71
68
  status: 401,
72
69
  description: 'Unauthorized'
@@ -9,13 +9,13 @@ Object.defineProperty(exports, "RolePermissionController", {
9
9
  }
10
10
  });
11
11
  const _nestjsshared = require("@flusys/nestjs-shared");
12
- const _config = require("../config");
13
12
  const _common = require("@nestjs/common");
14
13
  const _swagger = require("@nestjs/swagger");
14
+ const _config = require("../config");
15
15
  const _permissiondto = require("../dtos/permission.dto");
16
16
  const _helpers = require("../helpers");
17
- const _permissionservice = require("../services/permission.service");
18
17
  const _iamconfigservice = require("../services/iam-config.service");
18
+ const _permissionservice = require("../services/permission.service");
19
19
  function _define_property(obj, key, value) {
20
20
  if (key in obj) {
21
21
  Object.defineProperty(obj, key, {
@@ -45,7 +45,18 @@ function _ts_param(paramIndex, decorator) {
45
45
  }
46
46
  let RolePermissionController = class RolePermissionController {
47
47
  async assignRoleActions(dto) {
48
- return this.permissionService.assignRoleActions(dto);
48
+ const result = await this.permissionService.assignRoleActions(dto);
49
+ return {
50
+ success: true,
51
+ message: 'Role actions updated successfully',
52
+ messageKey: _config.PERMISSION_OPERATION_MESSAGES.PROCESS_SUCCESS,
53
+ messageVariables: {
54
+ added: result.added,
55
+ removed: result.removed,
56
+ total: result.total
57
+ },
58
+ data: result
59
+ };
49
60
  }
50
61
  async getRoleActions(dto) {
51
62
  const actions = await this.permissionService.getRoleActions(dto.roleId);
@@ -58,7 +69,18 @@ let RolePermissionController = class RolePermissionController {
58
69
  }
59
70
  async assignUserRoles(dto, user) {
60
71
  (0, _helpers.validateCompanyAccess)(this.config, dto.companyId, user);
61
- return this.permissionService.assignUserRoles(dto);
72
+ const result = await this.permissionService.assignUserRoles(dto);
73
+ return {
74
+ success: true,
75
+ message: 'User roles updated successfully',
76
+ messageKey: _config.PERMISSION_OPERATION_MESSAGES.PROCESS_SUCCESS,
77
+ messageVariables: {
78
+ added: result.added,
79
+ removed: result.removed,
80
+ total: result.total
81
+ },
82
+ data: result
83
+ };
62
84
  }
63
85
  async getUserRoles(dto, user) {
64
86
  (0, _helpers.validateCompanyAccess)(this.config, dto.companyId, user);
@@ -85,10 +107,7 @@ _ts_decorate([
85
107
  summary: 'Assign/remove actions to/from role',
86
108
  description: 'RBAC mode. No branch scoping.'
87
109
  }),
88
- (0, _swagger.ApiResponse)({
89
- status: 200,
90
- type: _permissiondto.PermissionOperationResultDto
91
- }),
110
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.PermissionOperationResultDto),
92
111
  (0, _swagger.ApiBody)({
93
112
  type: _permissiondto.AssignRoleActionsDto
94
113
  }),
@@ -106,10 +125,7 @@ _ts_decorate([
106
125
  summary: 'Get role actions',
107
126
  description: 'Returns actions assigned to role.'
108
127
  }),
109
- (0, _swagger.ApiResponse)({
110
- status: 200,
111
- type: _nestjsshared.SingleResponseDto
112
- }),
128
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.RoleActionResponseDto, true, 'single'),
113
129
  (0, _swagger.ApiBody)({
114
130
  type: _permissiondto.GetRoleActionsDto
115
131
  }),
@@ -127,10 +143,7 @@ _ts_decorate([
127
143
  summary: 'Assign/remove roles to/from user',
128
144
  description: 'RBAC mode. If company feature enabled, branchId is required.'
129
145
  }),
130
- (0, _swagger.ApiResponse)({
131
- status: 200,
132
- type: _permissiondto.PermissionOperationResultDto
133
- }),
146
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.PermissionOperationResultDto),
134
147
  (0, _swagger.ApiBody)({
135
148
  type: _permissiondto.AssignUserRolesDto
136
149
  }),
@@ -150,10 +163,7 @@ _ts_decorate([
150
163
  summary: 'Get user roles',
151
164
  description: 'Returns roles assigned to user. Filter by companyId and branchId.'
152
165
  }),
153
- (0, _swagger.ApiResponse)({
154
- status: 200,
155
- type: _nestjsshared.SingleResponseDto
156
- }),
166
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.UserRoleResponseDto, true, 'single'),
157
167
  (0, _swagger.ApiBody)({
158
168
  type: _permissiondto.GetUserRolesDto
159
169
  }),
@@ -9,13 +9,13 @@ Object.defineProperty(exports, "UserActionPermissionController", {
9
9
  }
10
10
  });
11
11
  const _nestjsshared = require("@flusys/nestjs-shared");
12
- const _config = require("../config");
13
12
  const _common = require("@nestjs/common");
14
13
  const _swagger = require("@nestjs/swagger");
14
+ const _config = require("../config");
15
15
  const _permissiondto = require("../dtos/permission.dto");
16
16
  const _helpers = require("../helpers");
17
- const _permissionservice = require("../services/permission.service");
18
17
  const _iamconfigservice = require("../services/iam-config.service");
18
+ const _permissionservice = require("../services/permission.service");
19
19
  function _define_property(obj, key, value) {
20
20
  if (key in obj) {
21
21
  Object.defineProperty(obj, key, {
@@ -46,7 +46,18 @@ function _ts_param(paramIndex, decorator) {
46
46
  let UserActionPermissionController = class UserActionPermissionController {
47
47
  async assignUserActions(dto, user) {
48
48
  (0, _helpers.validateCompanyAccess)(this.config, dto.companyId, user);
49
- return this.permissionService.assignUserActions(dto);
49
+ const result = await this.permissionService.assignUserActions(dto);
50
+ return {
51
+ success: true,
52
+ message: 'User actions updated successfully',
53
+ messageKey: _config.PERMISSION_OPERATION_MESSAGES.PROCESS_SUCCESS,
54
+ messageVariables: {
55
+ added: result.added,
56
+ removed: result.removed,
57
+ total: result.total
58
+ },
59
+ data: result
60
+ };
50
61
  }
51
62
  async getUserActions(dto, user) {
52
63
  (0, _helpers.validateCompanyAccess)(this.config, dto.companyId, user);
@@ -73,10 +84,7 @@ _ts_decorate([
73
84
  summary: 'Assign/remove actions to/from user',
74
85
  description: 'Direct permissions. If company feature enabled, branchId is required.'
75
86
  }),
76
- (0, _swagger.ApiResponse)({
77
- status: 200,
78
- type: _permissiondto.PermissionOperationResultDto
79
- }),
87
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.PermissionOperationResultDto),
80
88
  (0, _swagger.ApiBody)({
81
89
  type: _permissiondto.AssignUserActionsDto
82
90
  }),
@@ -96,10 +104,7 @@ _ts_decorate([
96
104
  summary: 'Get user direct actions',
97
105
  description: 'Returns direct action permissions for user. Filter by companyId and branchId.'
98
106
  }),
99
- (0, _swagger.ApiResponse)({
100
- status: 200,
101
- type: _nestjsshared.SingleResponseDto
102
- }),
107
+ (0, _nestjsshared.ApiResponseDto)(_permissiondto.UserActionResponseDto, true, 'single'),
103
108
  (0, _swagger.ApiBody)({
104
109
  type: _permissiondto.GetUserActionsDto
105
110
  }),
@@ -17,7 +17,8 @@ const _permissiontypeenum = require("../enums/permission-type.enum");
17
17
  'User Permissions',
18
18
  'Company Selection'
19
19
  ];
20
- function iamSwaggerConfig(enableCompanyFeature = false, permissionMode = _permissiontypeenum.IAMPermissionMode.FULL) {
20
+ function iamSwaggerConfig(enableCompanyFeature = false, permissionMode = _permissiontypeenum.IAMPermissionMode.FULL, databaseMode = 'single') {
21
+ const multiTenantNote = databaseMode === 'multi-tenant' ? `\n> **Multi-Tenant Mode**: Include \`x-tenant-id\` header to target a specific tenant database.\n` : '';
21
22
  const excludeSchemaProperties = enableCompanyFeature ? [] : [
22
23
  // DTOs with companyId and branchId
23
24
  {
@@ -115,7 +116,7 @@ function iamSwaggerConfig(enableCompanyFeature = false, permissionMode = _permis
115
116
  title: 'IAM API',
116
117
  description: `
117
118
  ## Identity & Access Management API
118
-
119
+ ${multiTenantNote}
119
120
  Advanced permission system with flexible modes: RBAC, Direct Permissions, or both.
120
121
 
121
122
  ### Current Configuration
@@ -61,7 +61,6 @@ let CreateActionDto = class CreateActionDto {
61
61
  _define_property(this, "parentId", void 0);
62
62
  _define_property(this, "serial", void 0);
63
63
  _define_property(this, "isActive", void 0);
64
- _define_property(this, "metadata", void 0);
65
64
  }
66
65
  };
67
66
  _ts_decorate([
@@ -145,14 +144,6 @@ _ts_decorate([
145
144
  (0, _classvalidator.IsOptional)(),
146
145
  _ts_metadata("design:type", Boolean)
147
146
  ], CreateActionDto.prototype, "isActive", void 0);
148
- _ts_decorate([
149
- (0, _swagger.ApiProperty)({
150
- description: 'Additional metadata',
151
- required: false
152
- }),
153
- (0, _classvalidator.IsOptional)(),
154
- _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
155
- ], CreateActionDto.prototype, "metadata", void 0);
156
147
  let UpdateActionDto = class UpdateActionDto extends (0, _swagger.PartialType)(CreateActionDto) {
157
148
  constructor(...args){
158
149
  super(...args), _define_property(this, "id", void 0);
@@ -179,7 +170,6 @@ let ActionResponseDto = class ActionResponseDto {
179
170
  _define_property(this, "parentId", void 0);
180
171
  _define_property(this, "serial", void 0);
181
172
  _define_property(this, "isActive", void 0);
182
- _define_property(this, "metadata", void 0);
183
173
  _define_property(this, "createdAt", void 0);
184
174
  _define_property(this, "updatedAt", void 0);
185
175
  _define_property(this, "deletedAt", void 0);
@@ -230,12 +220,6 @@ _ts_decorate([
230
220
  (0, _swagger.ApiProperty)(),
231
221
  _ts_metadata("design:type", Boolean)
232
222
  ], ActionResponseDto.prototype, "isActive", void 0);
233
- _ts_decorate([
234
- (0, _swagger.ApiProperty)({
235
- required: false
236
- }),
237
- _ts_metadata("design:type", Object)
238
- ], ActionResponseDto.prototype, "metadata", void 0);
239
223
  _ts_decorate([
240
224
  (0, _swagger.ApiProperty)(),
241
225
  _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
@@ -612,19 +612,11 @@ _ts_decorate([
612
612
  ], MyPermissionsResponseDto.prototype, "cachedEndpoints", void 0);
613
613
  let PermissionOperationResultDto = class PermissionOperationResultDto {
614
614
  constructor(){
615
- _define_property(this, "success", void 0);
616
615
  _define_property(this, "added", void 0);
617
616
  _define_property(this, "removed", void 0);
618
- _define_property(this, "message", void 0);
619
- _define_property(this, "messageKey", void 0);
617
+ _define_property(this, "total", void 0);
620
618
  }
621
619
  };
622
- _ts_decorate([
623
- (0, _swagger.ApiProperty)({
624
- description: 'Whether the operation succeeded'
625
- }),
626
- _ts_metadata("design:type", Boolean)
627
- ], PermissionOperationResultDto.prototype, "success", void 0);
628
620
  _ts_decorate([
629
621
  (0, _swagger.ApiProperty)({
630
622
  description: 'Number of permissions added'
@@ -639,14 +631,7 @@ _ts_decorate([
639
631
  ], PermissionOperationResultDto.prototype, "removed", void 0);
640
632
  _ts_decorate([
641
633
  (0, _swagger.ApiProperty)({
642
- description: 'Operation result message'
634
+ description: 'Number of permissions requested'
643
635
  }),
644
- _ts_metadata("design:type", String)
645
- ], PermissionOperationResultDto.prototype, "message", void 0);
646
- _ts_decorate([
647
- (0, _swagger.ApiPropertyOptional)({
648
- description: 'Translation key for localization',
649
- example: 'permission.process.success'
650
- }),
651
- _ts_metadata("design:type", String)
652
- ], PermissionOperationResultDto.prototype, "messageKey", void 0);
636
+ _ts_metadata("design:type", Number)
637
+ ], PermissionOperationResultDto.prototype, "total", void 0);
@@ -50,7 +50,6 @@ let CreateRoleDto = class CreateRoleDto {
50
50
  _define_property(this, "companyId", void 0);
51
51
  _define_property(this, "isActive", void 0);
52
52
  _define_property(this, "serial", void 0);
53
- _define_property(this, "metadata", void 0);
54
53
  }
55
54
  };
56
55
  _ts_decorate([
@@ -103,14 +102,6 @@ _ts_decorate([
103
102
  (0, _classvalidator.IsOptional)(),
104
103
  _ts_metadata("design:type", Number)
105
104
  ], CreateRoleDto.prototype, "serial", void 0);
106
- _ts_decorate([
107
- (0, _swagger.ApiProperty)({
108
- description: 'Additional metadata',
109
- required: false
110
- }),
111
- (0, _classvalidator.IsOptional)(),
112
- _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
113
- ], CreateRoleDto.prototype, "metadata", void 0);
114
105
  let UpdateRoleDto = class UpdateRoleDto extends (0, _swagger.PartialType)(CreateRoleDto) {
115
106
  constructor(...args){
116
107
  super(...args), _define_property(this, "id", void 0);
@@ -134,7 +125,6 @@ let RoleResponseDto = class RoleResponseDto {
134
125
  _define_property(this, "companyId", void 0);
135
126
  _define_property(this, "isActive", void 0);
136
127
  _define_property(this, "serial", void 0);
137
- _define_property(this, "metadata", void 0);
138
128
  _define_property(this, "createdAt", void 0);
139
129
  _define_property(this, "updatedAt", void 0);
140
130
  _define_property(this, "deletedAt", void 0);
@@ -171,12 +161,6 @@ _ts_decorate([
171
161
  (0, _swagger.ApiProperty)(),
172
162
  _ts_metadata("design:type", Object)
173
163
  ], RoleResponseDto.prototype, "serial", void 0);
174
- _ts_decorate([
175
- (0, _swagger.ApiProperty)({
176
- required: false
177
- }),
178
- _ts_metadata("design:type", Object)
179
- ], RoleResponseDto.prototype, "metadata", void 0);
180
164
  _ts_decorate([
181
165
  (0, _swagger.ApiProperty)(),
182
166
  _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
@@ -35,7 +35,7 @@ function _ts_metadata(k, v) {
35
35
  }
36
36
  let ActionBase = class ActionBase extends _nestjsshared.Identity {
37
37
  constructor(...args){
38
- super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "code", void 0), _define_property(this, "actionType", void 0), _define_property(this, "permissionLogic", void 0), _define_property(this, "serial", void 0), _define_property(this, "isActive", void 0), _define_property(this, "parent", void 0), _define_property(this, "parentId", void 0), _define_property(this, "children", void 0), _define_property(this, "metadata", void 0);
38
+ super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "code", void 0), _define_property(this, "actionType", void 0), _define_property(this, "permissionLogic", void 0), _define_property(this, "serial", void 0), _define_property(this, "isActive", void 0), _define_property(this, "parent", void 0), _define_property(this, "parentId", void 0), _define_property(this, "children", void 0);
39
39
  }
40
40
  };
41
41
  _ts_decorate([
@@ -83,7 +83,8 @@ _ts_decorate([
83
83
  _ts_metadata("design:type", typeof _enums.ActionType === "undefined" ? Object : _enums.ActionType)
84
84
  ], ActionBase.prototype, "actionType", void 0);
85
85
  _ts_decorate([
86
- (0, _typeorm.Column)('simple-json', {
86
+ (0, _typeorm.Column)({
87
+ type: 'json',
87
88
  nullable: true,
88
89
  name: 'permission_logic'
89
90
  }),
@@ -127,9 +128,3 @@ _ts_decorate([
127
128
  (0, _typeorm.OneToMany)('Action', 'parent'),
128
129
  _ts_metadata("design:type", Array)
129
130
  ], ActionBase.prototype, "children", void 0);
130
- _ts_decorate([
131
- (0, _typeorm.Column)('simple-json', {
132
- nullable: true
133
- }),
134
- _ts_metadata("design:type", Object)
135
- ], ActionBase.prototype, "metadata", void 0);
@@ -64,7 +64,7 @@ let PermissionBase = class PermissionBase extends _nestjsshared.Identity {
64
64
  return true;
65
65
  }
66
66
  constructor(...args){
67
- super(...args), _define_property(this, "permissionType", void 0), _define_property(this, "sourceType", void 0), _define_property(this, "sourceId", void 0), _define_property(this, "targetType", void 0), _define_property(this, "targetId", void 0), _define_property(this, "userId", void 0), _define_property(this, "validFrom", void 0), _define_property(this, "validUntil", void 0), _define_property(this, "reason", void 0), _define_property(this, "metadata", void 0);
67
+ super(...args), _define_property(this, "permissionType", void 0), _define_property(this, "sourceType", void 0), _define_property(this, "sourceId", void 0), _define_property(this, "targetType", void 0), _define_property(this, "targetId", void 0), _define_property(this, "userId", void 0), _define_property(this, "validFrom", void 0), _define_property(this, "validUntil", void 0), _define_property(this, "reason", void 0);
68
68
  }
69
69
  };
70
70
  _ts_decorate([
@@ -136,9 +136,3 @@ _ts_decorate([
136
136
  }),
137
137
  _ts_metadata("design:type", Object)
138
138
  ], PermissionBase.prototype, "reason", void 0);
139
- _ts_decorate([
140
- (0, _typeorm.Column)('simple-json', {
141
- nullable: true
142
- }),
143
- _ts_metadata("design:type", Object)
144
- ], PermissionBase.prototype, "metadata", void 0);
@@ -34,7 +34,7 @@ function _ts_metadata(k, v) {
34
34
  }
35
35
  let RoleBase = class RoleBase extends _nestjsshared.Identity {
36
36
  constructor(...args){
37
- super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "isActive", void 0), _define_property(this, "serial", void 0), _define_property(this, "metadata", void 0);
37
+ super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "isActive", void 0), _define_property(this, "serial", void 0);
38
38
  }
39
39
  };
40
40
  _ts_decorate([
@@ -78,9 +78,3 @@ _ts_decorate([
78
78
  }),
79
79
  _ts_metadata("design:type", Object)
80
80
  ], RoleBase.prototype, "serial", void 0);
81
- _ts_decorate([
82
- (0, _typeorm.Column)('simple-json', {
83
- nullable: true
84
- }),
85
- _ts_metadata("design:type", Object)
86
- ], RoleBase.prototype, "metadata", void 0);
@@ -95,7 +95,6 @@ let ActionService = class ActionService extends _classes.RequestScopedApiService
95
95
  serial: entity.serial,
96
96
  isActive: entity.isActive,
97
97
  parentId: entity.parentId,
98
- metadata: entity.metadata,
99
98
  createdAt: entity.createdAt,
100
99
  updatedAt: entity.updatedAt,
101
100
  deletedAt: entity.deletedAt,
@@ -109,7 +108,7 @@ let ActionService = class ActionService extends _classes.RequestScopedApiService
109
108
  throw new _common.BadRequestException({
110
109
  message: `User is required for ${methodName}`,
111
110
  messageKey: _config.PERMISSION_OPERATION_MESSAGES.USER_REQUIRED,
112
- messageParams: {
111
+ messageVariables: {
113
112
  method: methodName
114
113
  }
115
114
  });
@@ -8,10 +8,10 @@ Object.defineProperty(exports, "PermissionService", {
8
8
  return PermissionService;
9
9
  }
10
10
  });
11
- const _config = require("../config");
12
11
  const _nestjsshared = require("@flusys/nestjs-shared");
13
12
  const _common = require("@nestjs/common");
14
13
  const _typeorm = require("typeorm");
14
+ const _config = require("../config");
15
15
  const _permissiondto = require("../dtos/permission.dto");
16
16
  const _actionentity = require("../entities/action.entity");
17
17
  const _permissionwithcompanyentity = require("../entities/permission-with-company.entity");
@@ -265,8 +265,8 @@ let PermissionService = class PermissionService {
265
265
  });
266
266
  removed = result.affected || 0;
267
267
  }
268
- const affectedUsers = await this.invalidateRoleMembersCache(dto.roleId);
269
- return this.buildOperationResult(dto.items.length, added, removed, `. Invalidated cache for ${affectedUsers} users.`);
268
+ await this.invalidateRoleMembersCache(dto.roleId);
269
+ return this.buildOperationResult(dto.items.length, added, removed);
270
270
  }
271
271
  async getRoleActions(roleId) {
272
272
  const permissionRepo = await this.getPermissionRepository();
@@ -311,8 +311,6 @@ let PermissionService = class PermissionService {
311
311
  const { toAdd: itemsToAdd, toRemove: itemsToRemove } = this.splitItemsByAction(dto.items);
312
312
  let added = 0;
313
313
  let removed = 0;
314
- let removedRoleActions = 0;
315
- let removedUserActions = 0;
316
314
  await dataSource.transaction(async (manager)=>{
317
315
  const transactionalPermissionRepo = manager.getRepository(permissionRepo.target);
318
316
  if (itemsToAdd.length > 0) {
@@ -322,13 +320,10 @@ let PermissionService = class PermissionService {
322
320
  const actionIdsToRemove = itemsToRemove.map((item)=>item.id);
323
321
  const cascadeResult = await this.removeCompanyActionsWithCascade(manager, dto.companyId, actionIdsToRemove);
324
322
  removed = cascadeResult.removedCompanyActions;
325
- removedRoleActions = cascadeResult.removedRoleActions;
326
- removedUserActions = cascadeResult.removedUserActions;
327
323
  }
328
324
  });
329
- const affectedCacheEntries = await this.invalidateCompanyMembersCache(dto.companyId);
330
- const cascadeInfo = removedRoleActions > 0 || removedUserActions > 0 ? ` Cascaded removal: ${removedRoleActions} role permissions, ${removedUserActions} user permissions.` : '';
331
- return this.buildOperationResult(dto.items.length, added, removed, `.${cascadeInfo} Invalidated ${affectedCacheEntries} cache entries.`);
325
+ await this.invalidateCompanyMembersCache(dto.companyId);
326
+ return this.buildOperationResult(dto.items.length, added, removed);
332
327
  }
333
328
  async addCompanyActions(permissionRepo, companyId, actionIds) {
334
329
  const existingPermissions = await permissionRepo.find({
@@ -732,13 +727,11 @@ let PermissionService = class PermissionService {
732
727
  toRemove: items.filter((item)=>item.action === _permissiondto.PermissionAction.REMOVE)
733
728
  };
734
729
  }
735
- /** Build standard operation result DTO */ buildOperationResult(totalItems, added, removed, additionalMessage = '') {
730
+ /** Build standard operation result DTO */ buildOperationResult(_totalItems, added, removed) {
736
731
  return {
737
- success: true,
738
732
  added,
739
733
  removed,
740
- message: `Successfully processed ${totalItems} items: ${added} added, ${removed} removed${additionalMessage}`,
741
- messageKey: _config.PERMISSION_OPERATION_MESSAGES.PROCESS_SUCCESS
734
+ total: _totalItems
742
735
  };
743
736
  }
744
737
  /** Get role IDs assigned to a user (merges company-wide + branch-specific roles) */ async getUserRoleIds(userId, branchId, companyId) {
@@ -112,7 +112,6 @@ let RoleService = class RoleService extends _classes.RequestScopedApiService {
112
112
  isActive: entity.isActive,
113
113
  serial: entity.serial,
114
114
  companyId: ('companyId' in entity ? entity.companyId : null) ?? null,
115
- metadata: entity.metadata,
116
115
  createdAt: entity.createdAt,
117
116
  updatedAt: entity.updatedAt,
118
117
  deletedAt: entity.deletedAt,