@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.
- package/README.md +87 -369
- package/cjs/config/message-keys.js +7 -49
- package/cjs/controllers/company-action-permission.controller.js +19 -18
- package/cjs/controllers/my-permission.controller.js +1 -4
- package/cjs/controllers/role-permission.controller.js +30 -20
- package/cjs/controllers/user-action-permission.controller.js +16 -11
- package/cjs/docs/iam-swagger.config.js +3 -2
- package/cjs/dtos/action.dto.js +0 -16
- package/cjs/dtos/permission.dto.js +4 -19
- package/cjs/dtos/role.dto.js +0 -16
- package/cjs/entities/action-base.entity.js +3 -8
- package/cjs/entities/permission-base.entity.js +1 -7
- package/cjs/entities/role-base.entity.js +1 -7
- package/cjs/services/action.service.js +1 -2
- package/cjs/services/permission.service.js +7 -14
- package/cjs/services/role.service.js +0 -1
- package/config/message-keys.d.ts +4 -84
- package/controllers/company-action-permission.controller.d.ts +3 -3
- package/controllers/role-permission.controller.d.ts +4 -4
- package/controllers/user-action-permission.controller.d.ts +3 -3
- package/docs/iam-swagger.config.d.ts +1 -1
- package/dtos/action.dto.d.ts +0 -2
- package/dtos/permission.dto.d.ts +1 -3
- package/dtos/role.dto.d.ts +0 -2
- package/entities/action-base.entity.d.ts +0 -1
- package/entities/permission-base.entity.d.ts +0 -1
- package/entities/role-base.entity.d.ts +0 -1
- package/fesm/config/message-keys.js +7 -44
- package/fesm/controllers/company-action-permission.controller.js +22 -21
- package/fesm/controllers/my-permission.controller.js +2 -5
- package/fesm/controllers/role-permission.controller.js +33 -23
- package/fesm/controllers/user-action-permission.controller.js +19 -14
- package/fesm/docs/iam-swagger.config.js +3 -2
- package/fesm/dtos/action.dto.js +0 -16
- package/fesm/dtos/permission.dto.js +4 -19
- package/fesm/dtos/role.dto.js +0 -16
- package/fesm/entities/action-base.entity.js +3 -8
- package/fesm/entities/permission-base.entity.js +1 -7
- package/fesm/entities/role-base.entity.js +1 -7
- package/fesm/services/action.service.js +1 -2
- package/fesm/services/permission.service.js +7 -14
- package/fesm/services/role.service.js +0 -1
- package/interfaces/action.interface.d.ts +0 -1
- package/interfaces/role.interface.d.ts +0 -1
- 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
|
|
46
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
package/cjs/dtos/action.dto.js
CHANGED
|
@@ -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, "
|
|
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: '
|
|
634
|
+
description: 'Number of permissions requested'
|
|
643
635
|
}),
|
|
644
|
-
_ts_metadata("design:type",
|
|
645
|
-
], PermissionOperationResultDto.prototype, "
|
|
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);
|
package/cjs/dtos/role.dto.js
CHANGED
|
@@ -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)
|
|
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)(
|
|
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)
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
return this.buildOperationResult(dto.items.length, added, removed
|
|
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
|
-
|
|
330
|
-
|
|
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(
|
|
730
|
+
/** Build standard operation result DTO */ buildOperationResult(_totalItems, added, removed) {
|
|
736
731
|
return {
|
|
737
|
-
success: true,
|
|
738
732
|
added,
|
|
739
733
|
removed,
|
|
740
|
-
|
|
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,
|