emilsoftware-utilities 1.3.105 → 1.3.107

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.
@@ -19,4 +19,5 @@ export declare class PermissionController {
19
19
  assignPermissionsToUser(res: Response, codiceUtente: number, assignPermissionsRequest: AssignPermissionsToUserRequest): Promise<Response<any, Record<string, any>>>;
20
20
  deleteRole(codiceRuolo: number, res: Response): Promise<Response<any, Record<string, any>>>;
21
21
  getMenus(res: Response): Promise<Response<any, Record<string, any>>>;
22
+ getUserRolesAndGrants(codiceUtente: number, res: Response): Promise<Response<any, Record<string, any>>>;
22
23
  }
@@ -32,6 +32,7 @@ const AssignRolesToUserRequest_1 = require("../Dtos/AssignRolesToUserRequest");
32
32
  const AssignPermissionsToUserRequest_1 = require("../Dtos/AssignPermissionsToUserRequest");
33
33
  const GetMenusResponse_1 = require("../Dtos/GetMenusResponse");
34
34
  const GetRolesResponse_1 = require("../Dtos/GetRolesResponse");
35
+ const UserGrantsDto_1 = require("../Dtos/UserGrantsDto");
35
36
  let PermissionController = PermissionController_1 = class PermissionController {
36
37
  constructor(permissionService, options) {
37
38
  this.permissionService = permissionService;
@@ -156,6 +157,17 @@ let PermissionController = PermissionController_1 = class PermissionController {
156
157
  }
157
158
  });
158
159
  }
160
+ getUserRolesAndGrants(codiceUtente, res) {
161
+ return __awaiter(this, void 0, void 0, function* () {
162
+ try {
163
+ const menus = yield this.permissionService.getUserRolesAndGrants(codiceUtente);
164
+ return Utilities_1.RestUtilities.sendBaseResponse(res, menus);
165
+ }
166
+ catch (error) {
167
+ return Utilities_1.RestUtilities.sendErrorMessage(res, error, PermissionController_1.name);
168
+ }
169
+ });
170
+ }
159
171
  };
160
172
  exports.PermissionController = PermissionController;
161
173
  __decorate([
@@ -285,6 +297,18 @@ __decorate([
285
297
  __metadata("design:paramtypes", [Object]),
286
298
  __metadata("design:returntype", Promise)
287
299
  ], PermissionController.prototype, "getMenus", null);
300
+ __decorate([
301
+ (0, swagger_1.ApiOperation)({ summary: 'Recupera i ruoli e i menù di un utente', operationId: "getUserRolesAndGrants" }),
302
+ (0, swagger_1.ApiOkResponse)({ description: 'Elenco menù', type: UserGrantsDto_1.UserGrantsDto }),
303
+ (0, swagger_1.ApiResponse)({ status: 200, description: "Lista dei menù recuperata con successo" }),
304
+ (0, swagger_1.ApiResponse)({ status: 500, description: "Errore interno del server" }),
305
+ (0, common_1.Get)('grants/:codiceUtente'),
306
+ __param(0, (0, common_1.Param)('codiceUtente')),
307
+ __param(1, (0, common_1.Res)()),
308
+ __metadata("design:type", Function),
309
+ __metadata("design:paramtypes", [Number, Object]),
310
+ __metadata("design:returntype", Promise)
311
+ ], PermissionController.prototype, "getUserRolesAndGrants", null);
288
312
  exports.PermissionController = PermissionController = PermissionController_1 = __decorate([
289
313
  (0, swagger_1.ApiTags)('Permission'),
290
314
  (0, common_1.Controller)('accessi/permission'),
@@ -1,11 +1,11 @@
1
1
  import { TipoAbilitazione } from "./TipoAbilitazione";
2
2
  export declare class AbilitazioneMenu {
3
3
  codiceMenu: string;
4
- tipoAbilitazione: TipoAbilitazione;
5
- descrizioneMenu: string;
6
- descrizioneGruppo: string;
7
- codiceGruppo: string;
8
- icona: string | null;
9
- tipo: string | null;
10
- pagina: string | null;
4
+ tipoAbilitazione?: TipoAbilitazione;
5
+ descrizioneMenu?: string;
6
+ descrizioneGruppo?: string;
7
+ codiceGruppo?: string;
8
+ icona?: string | null;
9
+ tipo?: string | null;
10
+ pagina?: string | null;
11
11
  }
@@ -27,7 +27,7 @@ __decorate([
27
27
  __metadata("design:type", String)
28
28
  ], AbilitazioneMenu.prototype, "codiceMenu", void 0);
29
29
  __decorate([
30
- (0, swagger_1.ApiProperty)({
30
+ (0, swagger_1.ApiPropertyOptional)({
31
31
  description: 'Tipo di abilitazione',
32
32
  enum: TipoAbilitazione_1.TipoAbilitazione,
33
33
  example: TipoAbilitazione_1.TipoAbilitazione.LETTURA
@@ -36,7 +36,7 @@ __decorate([
36
36
  __metadata("design:type", Number)
37
37
  ], AbilitazioneMenu.prototype, "tipoAbilitazione", void 0);
38
38
  __decorate([
39
- (0, swagger_1.ApiProperty)({
39
+ (0, swagger_1.ApiPropertyOptional)({
40
40
  description: 'Descrizione del menu',
41
41
  example: 'Gestione utenti'
42
42
  }),
@@ -45,7 +45,7 @@ __decorate([
45
45
  __metadata("design:type", String)
46
46
  ], AbilitazioneMenu.prototype, "descrizioneMenu", void 0);
47
47
  __decorate([
48
- (0, swagger_1.ApiProperty)({
48
+ (0, swagger_1.ApiPropertyOptional)({
49
49
  description: 'Descrizione del gruppo a cui appartiene il menu',
50
50
  example: 'Amministrazione'
51
51
  }),
@@ -54,7 +54,7 @@ __decorate([
54
54
  __metadata("design:type", String)
55
55
  ], AbilitazioneMenu.prototype, "descrizioneGruppo", void 0);
56
56
  __decorate([
57
- (0, swagger_1.ApiProperty)({
57
+ (0, swagger_1.ApiPropertyOptional)({
58
58
  description: 'Codice univoco del gruppo a cui appartiene il menu',
59
59
  example: 'GRP_ADMIN'
60
60
  }),
@@ -1,12 +1,12 @@
1
1
  import { BaseResponse } from "./BaseResponse";
2
2
  import { FiltriUtente } from "./FiltriUtente";
3
- import { AbilitazioneMenu } from "./AbilitazioneMenu";
4
3
  import { TokenResult } from "./TokenResult";
5
4
  import { UserDto } from "./UserDto";
5
+ import { UserGrantsDto } from "./UserGrantsDto";
6
6
  export declare class LoginResult {
7
7
  utente?: UserDto;
8
8
  filtri?: FiltriUtente[];
9
- abilitazioni?: AbilitazioneMenu[];
9
+ userGrants?: UserGrantsDto;
10
10
  extensionFields?: any[];
11
11
  token?: TokenResult;
12
12
  }
@@ -13,11 +13,11 @@ exports.LoginResponse = exports.LoginResult = void 0;
13
13
  const swagger_1 = require("@nestjs/swagger");
14
14
  const BaseResponse_1 = require("./BaseResponse");
15
15
  const FiltriUtente_1 = require("./FiltriUtente");
16
- const AbilitazioneMenu_1 = require("./AbilitazioneMenu");
17
16
  const TokenResult_1 = require("./TokenResult");
18
17
  const UserDto_1 = require("./UserDto");
19
18
  const class_transformer_1 = require("class-transformer");
20
19
  const class_validator_1 = require("class-validator");
20
+ const UserGrantsDto_1 = require("./UserGrantsDto");
21
21
  class LoginResult {
22
22
  }
23
23
  exports.LoginResult = LoginResult;
@@ -34,11 +34,11 @@ __decorate([
34
34
  __metadata("design:type", Array)
35
35
  ], LoginResult.prototype, "filtri", void 0);
36
36
  __decorate([
37
- (0, swagger_1.ApiProperty)({ description: 'Abilitazioni utente', type: [AbilitazioneMenu_1.AbilitazioneMenu] }),
38
- (0, class_validator_1.ValidateNested)({ each: true }),
39
- (0, class_transformer_1.Type)(() => AbilitazioneMenu_1.AbilitazioneMenu),
40
- __metadata("design:type", Array)
41
- ], LoginResult.prototype, "abilitazioni", void 0);
37
+ (0, swagger_1.ApiProperty)({ description: 'Abilitazioni e ruoli utente', type: UserGrantsDto_1.UserGrantsDto }),
38
+ (0, class_validator_1.ValidateNested)(),
39
+ (0, class_transformer_1.Type)(() => UserGrantsDto_1.UserGrantsDto),
40
+ __metadata("design:type", UserGrantsDto_1.UserGrantsDto)
41
+ ], LoginResult.prototype, "userGrants", void 0);
42
42
  __decorate([
43
43
  (0, swagger_1.ApiProperty)({ description: 'Extension Fields', type: [Object] }),
44
44
  __metadata("design:type", Array)
@@ -1,12 +1,6 @@
1
- import { TipoAbilitazione } from './TipoAbilitazione';
2
- declare class Menu {
3
- codiceMenu: string;
4
- descrizioneMenu: string;
5
- tipoAbilitazione: TipoAbilitazione;
6
- }
1
+ import { AbilitazioneMenu } from './AbilitazioneMenu';
7
2
  export declare class Role {
8
3
  codiceRuolo?: string;
9
4
  descrizioneRuolo: string;
10
- menu: Menu[];
5
+ menu: AbilitazioneMenu[];
11
6
  }
12
- export {};
@@ -11,25 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.Role = void 0;
13
13
  const swagger_1 = require("@nestjs/swagger");
14
- const TipoAbilitazione_1 = require("./TipoAbilitazione");
15
- class Menu {
16
- }
17
- __decorate([
18
- (0, swagger_1.ApiProperty)({ description: 'Codice univoco del menù' }),
19
- __metadata("design:type", String)
20
- ], Menu.prototype, "codiceMenu", void 0);
21
- __decorate([
22
- (0, swagger_1.ApiProperty)({ description: 'Descrizione del menù' }),
23
- __metadata("design:type", String)
24
- ], Menu.prototype, "descrizioneMenu", void 0);
25
- __decorate([
26
- (0, swagger_1.ApiProperty)({
27
- description: 'Tipo di abilitazione',
28
- enum: TipoAbilitazione_1.TipoAbilitazione,
29
- example: TipoAbilitazione_1.TipoAbilitazione.LETTURA,
30
- }),
31
- __metadata("design:type", Number)
32
- ], Menu.prototype, "tipoAbilitazione", void 0);
14
+ const AbilitazioneMenu_1 = require("./AbilitazioneMenu");
33
15
  class Role {
34
16
  }
35
17
  exports.Role = Role;
@@ -44,7 +26,7 @@ __decorate([
44
26
  __decorate([
45
27
  (0, swagger_1.ApiProperty)({
46
28
  description: 'Lista di menù associati al ruolo',
47
- type: [Menu]
29
+ type: [AbilitazioneMenu_1.AbilitazioneMenu]
48
30
  }),
49
31
  __metadata("design:type", Array)
50
32
  ], Role.prototype, "menu", void 0);
@@ -0,0 +1,7 @@
1
+ import { AbilitazioneMenu } from "./AbilitazioneMenu";
2
+ import { Role } from "./Role";
3
+ export declare class UserGrantsDto {
4
+ abilitazioni: AbilitazioneMenu[];
5
+ ruoli: Role[];
6
+ grants: AbilitazioneMenu[];
7
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UserGrantsDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const class_validator_1 = require("class-validator");
16
+ const AbilitazioneMenu_1 = require("./AbilitazioneMenu");
17
+ const Role_1 = require("./Role");
18
+ class UserGrantsDto {
19
+ }
20
+ exports.UserGrantsDto = UserGrantsDto;
21
+ __decorate([
22
+ (0, swagger_1.ApiProperty)({ description: 'Abilitazioni dell\'utente', type: [AbilitazioneMenu_1.AbilitazioneMenu] }),
23
+ (0, class_validator_1.ValidateNested)({ each: true }),
24
+ (0, class_transformer_1.Type)(() => AbilitazioneMenu_1.AbilitazioneMenu),
25
+ __metadata("design:type", Array)
26
+ ], UserGrantsDto.prototype, "abilitazioni", void 0);
27
+ __decorate([
28
+ (0, swagger_1.ApiProperty)({ description: 'Ruoli dell\'utente', type: [Role_1.Role] }),
29
+ (0, class_validator_1.ValidateNested)({ each: true }),
30
+ (0, class_transformer_1.Type)(() => Role_1.Role),
31
+ __metadata("design:type", Array)
32
+ ], UserGrantsDto.prototype, "ruoli", void 0);
33
+ __decorate([
34
+ (0, swagger_1.ApiProperty)({ description: 'Grants combinati', type: [AbilitazioneMenu_1.AbilitazioneMenu] }),
35
+ (0, class_validator_1.ValidateNested)({ each: true }),
36
+ (0, class_transformer_1.Type)(() => AbilitazioneMenu_1.AbilitazioneMenu),
37
+ __metadata("design:type", Array)
38
+ ], UserGrantsDto.prototype, "grants", void 0);
@@ -67,8 +67,8 @@ let AuthService = class AuthService {
67
67
  if (today >= targetDate) {
68
68
  throw new Error("Password scaduta!");
69
69
  }
70
- // Recupera le abilitazioni
71
- const abilitazioni = yield this.permissionService.getAbilitazioniMenu(utente.codiceUtente, utente.flagSuper);
70
+ // Recupera i grants
71
+ const userGrants = yield this.permissionService.getUserRolesAndGrants(utente.codiceUtente);
72
72
  // Recupera i filtri
73
73
  const filtri = yield this.userService.getUserFilters(utente.codiceUtente);
74
74
  const updateLastAccessDateQuery = "UPDATE UTENTI SET DATLASTLOGIN = CURRENT_TIMESTAMP WHERE CODUTE = ?";
@@ -77,7 +77,7 @@ let AuthService = class AuthService {
77
77
  this.accessiOptions.extensionFieldsOptions.forEach((ext) => __awaiter(this, void 0, void 0, function* () {
78
78
  extensionFields.push(yield Orm_1.Orm.query(ext.databaseOptions, `SELECT ${ext.tableFields.join(",")} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} = ?`, [utente.codiceUtente]));
79
79
  }));
80
- return { utente, filtri, abilitazioni, extensionFields };
80
+ return { utente, filtri, userGrants, extensionFields };
81
81
  });
82
82
  }
83
83
  setPassword(codiceUtente, nuovaPassword) {
@@ -102,7 +102,6 @@ let AuthService = class AuthService {
102
102
  }
103
103
  getAdminUser() {
104
104
  return __awaiter(this, void 0, void 0, function* () {
105
- const abilitazioni = yield this.permissionService.getAbilitazioniMenu(6789, true);
106
105
  const filtri = yield this.userService.getUserFilters(6789);
107
106
  return {
108
107
  utente: {
@@ -122,7 +121,11 @@ let AuthService = class AuthService {
122
121
  permissions: []
123
122
  },
124
123
  filtri,
125
- abilitazioni
124
+ userGrants: {
125
+ abilitazioni: [],
126
+ grants: [],
127
+ ruoli: []
128
+ }
126
129
  };
127
130
  });
128
131
  }
@@ -145,7 +148,11 @@ let AuthService = class AuthService {
145
148
  permissions: []
146
149
  },
147
150
  filtri: null,
148
- abilitazioni: []
151
+ userGrants: {
152
+ abilitazioni: [],
153
+ grants: [],
154
+ ruoli: []
155
+ }
149
156
  };
150
157
  }
151
158
  confirmResetPassword(token, newPassword) {
@@ -10,9 +10,13 @@ export declare class PermissionService {
10
10
  resetAbilitazioni(codiceUtente: number): Promise<void>;
11
11
  updateOrInsertRole(role: Role, codiceRuolo?: string): Promise<void>;
12
12
  getRolesWithMenus(): Promise<Role[]>;
13
- getAbilitazioniMenu(codiceUtente: number, isSuperAdmin: boolean): Promise<AbilitazioneMenu[]>;
14
13
  assignRolesToUser(codiceUtente: number, roles: string[]): Promise<void>;
15
14
  assignPermissionsToUser(codiceUtente: number, permissions: Permission[]): Promise<void>;
16
15
  deleteRole(codiceRuolo: number): Promise<void>;
17
16
  getMenus(): Promise<MenuEntity[]>;
17
+ getUserRolesAndGrants(codiceUtente: number): Promise<{
18
+ abilitazioni: AbilitazioneMenu[];
19
+ ruoli: Role[];
20
+ grants: AbilitazioneMenu[];
21
+ }>;
18
22
  }
@@ -128,65 +128,6 @@ let PermissionService = class PermissionService {
128
128
  }
129
129
  });
130
130
  }
131
- getAbilitazioniMenu(codiceUtente, isSuperAdmin) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const query = isSuperAdmin
134
- ? `SELECT
135
- M.CODMNU AS codice_menu,
136
- 30 AS tipo_abilitazione,
137
- M.DESMNU AS descrizione_menu,
138
- G.DESGRP AS descrizione_gruppo,
139
- G.CODGRP AS codice_gruppo,
140
- M.ICON AS icona,
141
- M.CODTIP AS tipo,
142
- M.PAGINA AS pagina
143
- FROM MENU M
144
- INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
145
- WHERE M.FLGENABLED = 1 AND G.FLGENABLED = 1`
146
- : `WITH AbilitazioniTotali AS (
147
- SELECT
148
- A.CODMNU AS codice_menu,
149
- A.TIPABI AS tipo_abilitazione,
150
- M.DESMNU AS descrizione_menu,
151
- G.DESGRP AS descrizione_gruppo,
152
- G.CODGRP AS codice_gruppo,
153
- M.ICON AS icona,
154
- M.CODTIP AS tipo,
155
- M.PAGINA AS pagina
156
- FROM ABILITAZIONI A
157
- INNER JOIN MENU M ON A.CODMNU = M.CODMNU
158
- INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
159
- WHERE A.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1
160
-
161
- UNION ALL
162
-
163
- SELECT
164
- RM.CODMNU AS codice_menu,
165
- 5 AS tipo_abilitazione,
166
- M.DESMNU AS descrizione_menu,
167
- G.DESGRP AS descrizione_gruppo,
168
- G.CODGRP AS codice_gruppo,
169
- M.ICON AS icona,
170
- M.CODTIP AS tipo,
171
- M.PAGINA AS pagina
172
- FROM RUOLI_UTENTI RU
173
- INNER JOIN RUOLI R ON RU.CODRUL = R.CODRUL
174
- INNER JOIN RUOLI_MENU RM ON R.CODRUL = RM.CODRUL
175
- INNER JOIN MENU M ON RM.CODMNU = M.CODMNU
176
- INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
177
- WHERE RU.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1
178
- )
179
- SELECT codice_menu, tipo_abilitazione, descrizione_menu, descrizione_gruppo, codice_gruppo, icona, tipo, pagina
180
- FROM (
181
- SELECT *, ROW_NUMBER() OVER (PARTITION BY codice_menu ORDER BY tipo_abilitazione DESC) AS row_num
182
- FROM AbilitazioniTotali
183
- ) AS Ranked
184
- WHERE row_num = 1`;
185
- const queryParams = isSuperAdmin ? [] : [codiceUtente, codiceUtente];
186
- return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, queryParams)
187
- .then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase));
188
- });
189
- }
190
131
  assignRolesToUser(codiceUtente, roles) {
191
132
  return __awaiter(this, void 0, void 0, function* () {
192
133
  try {
@@ -272,6 +213,110 @@ let PermissionService = class PermissionService {
272
213
  }
273
214
  });
274
215
  }
216
+ getUserRolesAndGrants(codiceUtente) {
217
+ return __awaiter(this, void 0, void 0, function* () {
218
+ try {
219
+ const codiceUtenteQuery = "SELECT FLGSUPER as flag_super FROM UTENTI_CONFIG WHERE CODUTE = ?";
220
+ let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, codiceUtenteQuery, [codiceUtente]);
221
+ if (!result || result.length == 0)
222
+ throw new Error("Nessun utente trovato con il codice utente " + codiceUtente);
223
+ result = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
224
+ const isSuperAdmin = result[0].flagSuper;
225
+ let abilitazioni = [];
226
+ let ruoli = [];
227
+ if (isSuperAdmin) {
228
+ const query = `
229
+ SELECT
230
+ M.CODMNU AS codice_menu,
231
+ 30 AS tipo_abilitazione,
232
+ M.DESMNU AS descrizione_menu,
233
+ G.DESGRP AS descrizione_gruppo,
234
+ G.CODGRP AS codice_gruppo,
235
+ M.ICON AS icona,
236
+ M.CODTIP AS tipo,
237
+ M.PAGINA AS pagina
238
+ FROM MENU M
239
+ INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
240
+ WHERE M.FLGENABLED = 1 AND G.FLGENABLED = 1
241
+ `;
242
+ abilitazioni = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [])
243
+ .then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase)));
244
+ }
245
+ else {
246
+ const queryAbilitazioni = `
247
+ SELECT
248
+ A.CODMNU AS codice_menu,
249
+ A.TIPABI AS tipo_abilitazione,
250
+ M.DESMNU AS descrizione_menu,
251
+ G.DESGRP AS descrizione_gruppo,
252
+ G.CODGRP AS codice_gruppo,
253
+ M.ICON AS icona,
254
+ M.CODTIP AS tipo,
255
+ M.PAGINA AS pagina
256
+ FROM ABILITAZIONI A
257
+ INNER JOIN MENU M ON A.CODMNU = M.CODMNU
258
+ INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
259
+ WHERE A.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1
260
+ `;
261
+ abilitazioni = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryAbilitazioni, [codiceUtente])
262
+ .then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase)));
263
+ const queryRuoli = `
264
+ SELECT
265
+ R.CODRUO AS codice_ruolo,
266
+ R.DESRUO AS descrizione_ruolo,
267
+ RM.CODMNU AS codice_menu,
268
+ RM.TIPABI AS tipo_abilitazione,
269
+ M.DESMNU AS descrizione_menu
270
+ FROM RUOLI_UTENTI RU
271
+ INNER JOIN RUOLI R ON RU.CODRUL = R.CODRUL
272
+ INNER JOIN RUOLI_MENU RM ON R.CODRUL = RM.CODRUL
273
+ INNER JOIN MENU M ON RM.CODMNU = M.CODMNU
274
+ INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
275
+ WHERE RU.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1
276
+ `;
277
+ const ruoliResult = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryRuoli, [codiceUtente]);
278
+ const ruoliMap = new Map();
279
+ for (const row of ruoliResult) {
280
+ const { codiceRuolo, descrizioneRuolo, codiceMenu, descrizioneMenu, tipoAbilitazione } = row;
281
+ if (!ruoliMap.has(codiceRuolo)) {
282
+ ruoliMap.set(codiceRuolo, {
283
+ codiceRuolo,
284
+ descrizioneRuolo: descrizioneRuolo === null || descrizioneRuolo === void 0 ? void 0 : descrizioneRuolo.trim(),
285
+ menu: []
286
+ });
287
+ }
288
+ if (codiceMenu) {
289
+ ruoliMap.get(codiceRuolo).menu.push({
290
+ codiceMenu: codiceMenu.trim(),
291
+ tipoAbilitazione,
292
+ descrizioneMenu: descrizioneMenu === null || descrizioneMenu === void 0 ? void 0 : descrizioneMenu.trim(),
293
+ });
294
+ }
295
+ }
296
+ ruoli = Array.from(ruoliMap.values());
297
+ }
298
+ // Merge user-specific and role-based permissions
299
+ const grantsMap = new Map();
300
+ // Add user-specific permissions
301
+ for (const abilitazione of abilitazioni) {
302
+ grantsMap.set(abilitazione.codiceMenu, abilitazione);
303
+ }
304
+ // Add role-based permissions if not already present
305
+ for (const ruolo of ruoli) {
306
+ for (const menu of ruolo.menu) {
307
+ if (!grantsMap.has(menu.codiceMenu)) {
308
+ grantsMap.set(menu.codiceMenu, menu);
309
+ }
310
+ }
311
+ }
312
+ const grants = Array.from(grantsMap.values());
313
+ return { abilitazioni, ruoli, grants };
314
+ }
315
+ catch (error) {
316
+ throw error;
317
+ }
318
+ });
319
+ }
275
320
  };
276
321
  exports.PermissionService = PermissionService;
277
322
  exports.PermissionService = PermissionService = __decorate([
@@ -155,18 +155,70 @@ let UserService = class UserService {
155
155
  try {
156
156
  if (!codiceUtente)
157
157
  throw new Error("Impossibile aggiornare senza codice utente.");
158
- const queryUtenti = `
159
- UPDATE UTENTI
160
- SET usrname = ?, flggdpr = ?, stareg=?
161
- WHERE CODUTE = ?`;
162
- const paramsUtenti = [user.email, user.flagGdpr, user.statoRegistrazione, codiceUtente];
163
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);
164
- const queryUtentiConfig = `
165
- UPDATE UTENTI_CONFIG
166
- SET cognome = ?, nome = ?, avatar=?, flg2fatt=?, codlingua=?, cellulare=?, flgsuper=?, pagdef=?, json_metadata=?
167
- WHERE CODUTE = ?`;
168
- const paramsUtentiConfig = [user.cognome, user.nome, user.avatar, user.flagDueFattori, user.codiceLingua, user.cellulare, user.flagSuper, user.paginaDefault, user.jsonMetadata, codiceUtente];
169
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, paramsUtentiConfig);
158
+ // Costruzione dinamica della query per UTENTI
159
+ const utentiUpdates = [];
160
+ const utentiParams = [];
161
+ if (user.email !== undefined) {
162
+ utentiUpdates.push("usrname = ?");
163
+ utentiParams.push(user.email);
164
+ }
165
+ if (user.flagGdpr !== undefined) {
166
+ utentiUpdates.push("flggdpr = ?");
167
+ utentiParams.push(user.flagGdpr);
168
+ }
169
+ if (user.statoRegistrazione !== undefined) {
170
+ utentiUpdates.push("stareg = ?");
171
+ utentiParams.push(user.statoRegistrazione);
172
+ }
173
+ if (utentiUpdates.length > 0) {
174
+ const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(", ")} WHERE CODUTE = ?`;
175
+ utentiParams.push(codiceUtente);
176
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);
177
+ }
178
+ // Costruzione dinamica della query per UTENTI_CONFIG
179
+ const utentiConfigUpdates = [];
180
+ const utentiConfigParams = [];
181
+ if (user.cognome !== undefined) {
182
+ utentiConfigUpdates.push("cognome = ?");
183
+ utentiConfigParams.push(user.cognome);
184
+ }
185
+ if (user.nome !== undefined) {
186
+ utentiConfigUpdates.push("nome = ?");
187
+ utentiConfigParams.push(user.nome);
188
+ }
189
+ if (user.avatar !== undefined) {
190
+ utentiConfigUpdates.push("avatar = ?");
191
+ utentiConfigParams.push(user.avatar);
192
+ }
193
+ if (user.flagDueFattori !== undefined) {
194
+ utentiConfigUpdates.push("flg2fatt = ?");
195
+ utentiConfigParams.push(user.flagDueFattori);
196
+ }
197
+ if (user.codiceLingua !== undefined) {
198
+ utentiConfigUpdates.push("codlingua = ?");
199
+ utentiConfigParams.push(user.codiceLingua);
200
+ }
201
+ if (user.cellulare !== undefined) {
202
+ utentiConfigUpdates.push("cellulare = ?");
203
+ utentiConfigParams.push(user.cellulare);
204
+ }
205
+ if (user.flagSuper !== undefined) {
206
+ utentiConfigUpdates.push("flgsuper = ?");
207
+ utentiConfigParams.push(user.flagSuper);
208
+ }
209
+ if (user.paginaDefault !== undefined) {
210
+ utentiConfigUpdates.push("pagdef = ?");
211
+ utentiConfigParams.push(user.paginaDefault);
212
+ }
213
+ if (user.jsonMetadata !== undefined) {
214
+ utentiConfigUpdates.push("json_metadata = ?");
215
+ utentiConfigParams.push(user.jsonMetadata);
216
+ }
217
+ if (utentiConfigUpdates.length > 0) {
218
+ const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(", ")} WHERE CODUTE = ?`;
219
+ utentiConfigParams.push(codiceUtente);
220
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
221
+ }
170
222
  }
171
223
  catch (error) {
172
224
  throw error;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emilsoftware-utilities",
3
- "version": "1.3.105",
3
+ "version": "1.3.107",
4
4
  "description": "Utilities for EmilSoftware",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",