emilsoftware-utilities 2.0.0-dev.60 → 2.0.0-dev.61
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/dist/accessi-module/AccessiModule.d.ts +6 -0
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/console.js +163 -4
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Console/generated/accessiApi.d.ts +68 -5
- package/dist/accessi-module/Console/generated/accessiApi.js +84 -10
- package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/createScopeRequest.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/createScopeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createScopeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +4 -0
- package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/getMenuScopesResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getMenuScopesResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getMenuScopesResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getMenusParams.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/getMenusParams.js +9 -0
- package/dist/accessi-module/Console/generated/model/getMenusParams.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getScopesResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getScopesResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getScopesResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getUserRolesAndGrantsParams.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/getUserRolesAndGrantsParams.js +9 -0
- package/dist/accessi-module/Console/generated/model/getUserRolesAndGrantsParams.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/index.d.ts +9 -0
- package/dist/accessi-module/Console/generated/model/index.js +9 -0
- package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +2 -0
- package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/scopeEntity.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/scopeEntity.js +9 -0
- package/dist/accessi-module/Console/generated/model/scopeEntity.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/setMenuScopesRequest.d.ts +10 -0
- package/dist/accessi-module/Console/generated/model/setMenuScopesRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/setMenuScopesRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/setScopeMenusRequest.d.ts +10 -0
- package/dist/accessi-module/Console/generated/model/setScopeMenusRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/setScopeMenusRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateScopeRequest.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/updateScopeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateScopeRequest.js.map +1 -0
- package/dist/accessi-module/Console/index.html +1 -0
- package/dist/accessi-module/Controllers/PermissionController.d.ts +11 -3
- package/dist/accessi-module/Controllers/PermissionController.js +208 -12
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.d.ts +2 -0
- package/dist/accessi-module/Dtos/LoginRequest.js +10 -0
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/ScopeDtos.d.ts +28 -0
- package/dist/accessi-module/Dtos/ScopeDtos.js +103 -0
- package/dist/accessi-module/Dtos/ScopeDtos.js.map +1 -0
- package/dist/accessi-module/Dtos/index.d.ts +1 -0
- package/dist/accessi-module/Dtos/index.js +1 -0
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.js +3 -3
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +27 -4
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +177 -24
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +1 -0
- package/dist/accessi-module/Services/UserService/UserService.js +1 -1
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +2 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.d.ts +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.js +12 -1
- package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
- package/dist/accessi-module/database-updates/menuScopeSeed.d.ts +15 -0
- package/dist/accessi-module/database-updates/menuScopeSeed.js +338 -0
- package/dist/accessi-module/database-updates/menuScopeSeed.js.map +1 -0
- package/dist/accessi-module/database-updates/menuScopeSeeder.d.ts +8 -0
- package/dist/accessi-module/database-updates/menuScopeSeeder.js +131 -0
- package/dist/accessi-module/database-updates/menuScopeSeeder.js.map +1 -0
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +4 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.61.tgz +0 -0
- package/package.json +3 -3
- package/dist/emilsoftware-utilities-2.0.0-dev.60.tgz +0 -0
|
@@ -50,7 +50,8 @@ let PermissionService = class PermissionService {
|
|
|
50
50
|
return new Set(result.map((row) => { var _a; return Number((_a = row[fieldName]) !== null && _a !== void 0 ? _a : row[fieldName.toLowerCase()]); }));
|
|
51
51
|
}
|
|
52
52
|
getAllActiveMenusAsGrants() {
|
|
53
|
-
return __awaiter(this,
|
|
53
|
+
return __awaiter(this, arguments, void 0, function* (scopeCodes = []) {
|
|
54
|
+
const scopeFilter = this.scopeFilter('M', scopeCodes);
|
|
54
55
|
const query = `
|
|
55
56
|
SELECT
|
|
56
57
|
M.CODMNU AS codice_menu,
|
|
@@ -64,14 +65,49 @@ let PermissionService = class PermissionService {
|
|
|
64
65
|
M.NOTE AS note
|
|
65
66
|
FROM MENU M
|
|
66
67
|
LEFT JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
|
|
67
|
-
WHERE M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1
|
|
68
|
+
WHERE M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1${scopeFilter.sql}
|
|
68
69
|
`;
|
|
69
|
-
return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query,
|
|
70
|
+
return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, scopeFilter.params)
|
|
70
71
|
.then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase));
|
|
71
72
|
});
|
|
72
73
|
}
|
|
73
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Normalizza e valida il filtro `scope` (CSV). Restituisce i codici in
|
|
76
|
+
* maiuscolo; lista vuota significa "nessun filtro" (comportamento storico).
|
|
77
|
+
*/
|
|
78
|
+
resolveScopeCodes(scope) {
|
|
74
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
80
|
+
const codes = Array.from(new Set(String(scope !== null && scope !== void 0 ? scope : '')
|
|
81
|
+
.split(',')
|
|
82
|
+
.map((value) => value.trim().toUpperCase())
|
|
83
|
+
.filter((value) => value.length > 0)));
|
|
84
|
+
if (codes.length === 0) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
const placeholders = codes.map(() => '?').join(', ');
|
|
88
|
+
const rows = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT CODICE FROM SCOPES WHERE CODICE IN (${placeholders})`, codes));
|
|
89
|
+
const known = new Set(rows.map((row) => { var _a, _b; return String((_b = (_a = row.CODICE) !== null && _a !== void 0 ? _a : row.codice) !== null && _b !== void 0 ? _b : '').trim().toUpperCase(); }));
|
|
90
|
+
const missing = codes.filter((code) => !known.has(code));
|
|
91
|
+
if (missing.length > 0) {
|
|
92
|
+
throw new common_1.BadRequestException(`Scope non validi: ${missing.join(', ')}.`);
|
|
93
|
+
}
|
|
94
|
+
return codes;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Clausola SQL EXISTS per filtrare i menu sugli scope richiesti. */
|
|
98
|
+
scopeFilter(alias, scopeCodes) {
|
|
99
|
+
if (scopeCodes.length === 0) {
|
|
100
|
+
return { sql: '', params: [] };
|
|
101
|
+
}
|
|
102
|
+
const placeholders = scopeCodes.map(() => '?').join(', ');
|
|
103
|
+
return {
|
|
104
|
+
sql: ` AND EXISTS (SELECT 1 FROM MENU_SCOPES MS WHERE MS.CODICE_MENU = ${alias}.CODMNU AND MS.CODICE_SCOPE IN (${placeholders}))`,
|
|
105
|
+
params: [...scopeCodes],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
getUserDirectPermissions(codiceUtente_1) {
|
|
109
|
+
return __awaiter(this, arguments, void 0, function* (codiceUtente, scopeCodes = []) {
|
|
110
|
+
const scopeFilter = this.scopeFilter('M', scopeCodes);
|
|
75
111
|
const queryAbilitazioni = `
|
|
76
112
|
SELECT
|
|
77
113
|
A.CODMNU AS codice_menu,
|
|
@@ -86,14 +122,15 @@ let PermissionService = class PermissionService {
|
|
|
86
122
|
FROM ABILITAZIONI A
|
|
87
123
|
INNER JOIN MENU M ON A.CODMNU = M.CODMNU
|
|
88
124
|
LEFT JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
|
|
89
|
-
WHERE A.CODUTE = ? AND M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1
|
|
125
|
+
WHERE A.CODUTE = ? AND M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1${scopeFilter.sql}
|
|
90
126
|
`;
|
|
91
|
-
return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryAbilitazioni, [codiceUtente])
|
|
127
|
+
return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryAbilitazioni, [codiceUtente, ...scopeFilter.params])
|
|
92
128
|
.then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase));
|
|
93
129
|
});
|
|
94
130
|
}
|
|
95
|
-
getUserRoles(
|
|
96
|
-
return __awaiter(this,
|
|
131
|
+
getUserRoles(codiceUtente_1) {
|
|
132
|
+
return __awaiter(this, arguments, void 0, function* (codiceUtente, scopeCodes = []) {
|
|
133
|
+
const scopeFilter = this.scopeFilter('M', scopeCodes);
|
|
97
134
|
const queryRuoli = `
|
|
98
135
|
SELECT
|
|
99
136
|
R.CODRUO AS codice_ruolo,
|
|
@@ -110,9 +147,9 @@ let PermissionService = class PermissionService {
|
|
|
110
147
|
AND M.FLGENABLED = 1
|
|
111
148
|
LEFT JOIN MENU_GRP G
|
|
112
149
|
ON G.CODGRP = M.CODGRP
|
|
113
|
-
WHERE RU.CODUTE =
|
|
150
|
+
WHERE RU.CODUTE = ?${scopeFilter.sql}
|
|
114
151
|
`;
|
|
115
|
-
const ruoliResult = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryRuoli, [codiceUtente]))
|
|
152
|
+
const ruoliResult = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryRuoli, [codiceUtente, ...scopeFilter.params]))
|
|
116
153
|
.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
117
154
|
return this.assembleRoles(ruoliResult);
|
|
118
155
|
});
|
|
@@ -391,8 +428,10 @@ let PermissionService = class PermissionService {
|
|
|
391
428
|
});
|
|
392
429
|
}
|
|
393
430
|
/** Restituisce solo menu abilitati; per il catalogo amministrativo usare `getGroupsWithMenus(true)`. */
|
|
394
|
-
getMenus() {
|
|
431
|
+
getMenus(scope) {
|
|
395
432
|
return __awaiter(this, void 0, void 0, function* () {
|
|
433
|
+
const scopeCodes = yield this.resolveScopeCodes(scope);
|
|
434
|
+
const scopeFilter = this.scopeFilter('M', scopeCodes);
|
|
396
435
|
const query = `
|
|
397
436
|
SELECT
|
|
398
437
|
M.CODMNU AS codice_menu,
|
|
@@ -407,10 +446,10 @@ let PermissionService = class PermissionService {
|
|
|
407
446
|
M.ORDINE AS ordine_menu
|
|
408
447
|
FROM MENU M
|
|
409
448
|
LEFT JOIN MENU_GRP G ON M.CODGRP = G.CODGRP
|
|
410
|
-
WHERE M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1
|
|
449
|
+
WHERE M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1${scopeFilter.sql}
|
|
411
450
|
ORDER BY G.CODGRP, M.CODMNU
|
|
412
451
|
`;
|
|
413
|
-
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query,
|
|
452
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, scopeFilter.params);
|
|
414
453
|
return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
415
454
|
});
|
|
416
455
|
}
|
|
@@ -419,10 +458,15 @@ let PermissionService = class PermissionService {
|
|
|
419
458
|
* i flussi applicativi di autorizzazione devono usare il comportamento predefinito, che nasconde voci disabilitate.
|
|
420
459
|
*/
|
|
421
460
|
getGroupsWithMenus() {
|
|
422
|
-
return __awaiter(this, arguments, void 0, function* (includeDisabled = false) {
|
|
423
|
-
const
|
|
461
|
+
return __awaiter(this, arguments, void 0, function* (includeDisabled = false, scope) {
|
|
462
|
+
const scopeCodes = yield this.resolveScopeCodes(scope);
|
|
463
|
+
const scopeFilter = this.scopeFilter('M', scopeCodes);
|
|
464
|
+
let filtersClause = includeDisabled
|
|
424
465
|
? ''
|
|
425
466
|
: 'WHERE M.FLGENABLED = 1 AND (G.FLGENABLED IS NULL OR G.FLGENABLED = 1)';
|
|
467
|
+
if (scopeFilter.sql) {
|
|
468
|
+
filtersClause = filtersClause ? `${filtersClause}${scopeFilter.sql}` : `WHERE 1 = 1${scopeFilter.sql}`;
|
|
469
|
+
}
|
|
426
470
|
const query = `
|
|
427
471
|
SELECT
|
|
428
472
|
M.CODMNU AS codice_menu,
|
|
@@ -442,7 +486,7 @@ let PermissionService = class PermissionService {
|
|
|
442
486
|
${filtersClause}
|
|
443
487
|
ORDER BY G.CODGRP, M.CODMNU
|
|
444
488
|
`;
|
|
445
|
-
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query,
|
|
489
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, scopeFilter.params);
|
|
446
490
|
const groupMap = new Map();
|
|
447
491
|
result.forEach((row) => {
|
|
448
492
|
var _a, _b, _c;
|
|
@@ -676,17 +720,18 @@ let PermissionService = class PermissionService {
|
|
|
676
720
|
* Calcola l'autorizzazione effettiva: grant diretti e grant dei ruoli sono uniti per codice menu
|
|
677
721
|
* prendendo il livello massimo. I superutenti ricevono tutti i menu attivi.
|
|
678
722
|
*/
|
|
679
|
-
getUserRolesAndGrants(codiceUtente) {
|
|
723
|
+
getUserRolesAndGrants(codiceUtente, scope) {
|
|
680
724
|
return __awaiter(this, void 0, void 0, function* () {
|
|
681
725
|
var _a;
|
|
726
|
+
const scopeCodes = yield this.resolveScopeCodes(scope);
|
|
682
727
|
const codiceUtenteQuery = "SELECT FLGSUPER as flag_super FROM UTENTI_CONFIG WHERE CODUTE = ?";
|
|
683
728
|
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, codiceUtenteQuery, [codiceUtente]);
|
|
684
729
|
if (!result || result.length == 0)
|
|
685
730
|
throw new Error("Nessun utente trovato con il codice utente " + codiceUtente);
|
|
686
731
|
const isSuperAdmin = this.isSuperFlag((_a = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0]) === null || _a === void 0 ? void 0 : _a.flagSuper);
|
|
687
|
-
const abilitazioni = yield this.getUserDirectPermissions(codiceUtente);
|
|
688
|
-
const ruoli = yield this.getUserRoles(codiceUtente);
|
|
689
|
-
const grants = this.composeGrants(abilitazioni, ruoli, isSuperAdmin, yield this.getAllActiveMenusAsGrants());
|
|
732
|
+
const abilitazioni = yield this.getUserDirectPermissions(codiceUtente, scopeCodes);
|
|
733
|
+
const ruoli = yield this.getUserRoles(codiceUtente, scopeCodes);
|
|
734
|
+
const grants = this.composeGrants(abilitazioni, ruoli, isSuperAdmin, yield this.getAllActiveMenusAsGrants(scopeCodes));
|
|
690
735
|
return { abilitazioni, ruoli, grants };
|
|
691
736
|
});
|
|
692
737
|
}
|
|
@@ -698,9 +743,11 @@ let PermissionService = class PermissionService {
|
|
|
698
743
|
* (invece di N set di query) e restituisce mappa per codice utente. Stessa composizione della
|
|
699
744
|
* lettura singola.
|
|
700
745
|
*/
|
|
701
|
-
getUsersRolesAndGrants(codiciUtente) {
|
|
746
|
+
getUsersRolesAndGrants(codiciUtente, scope) {
|
|
702
747
|
return __awaiter(this, void 0, void 0, function* () {
|
|
703
748
|
var _a, _b;
|
|
749
|
+
const scopeCodes = yield this.resolveScopeCodes(scope);
|
|
750
|
+
const scopeFilter = this.scopeFilter('M', scopeCodes);
|
|
704
751
|
const result = new Map();
|
|
705
752
|
const ids = Array.from(new Set(codiciUtente.filter((id) => Number.isInteger(id) && id > 0)));
|
|
706
753
|
if (ids.length === 0) {
|
|
@@ -728,7 +775,7 @@ let PermissionService = class PermissionService {
|
|
|
728
775
|
FROM ABILITAZIONI A
|
|
729
776
|
INNER JOIN MENU M ON A.CODMNU = M.CODMNU
|
|
730
777
|
LEFT JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
|
|
731
|
-
WHERE A.CODUTE IN (${placeholders}) AND M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1`, ids)).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
778
|
+
WHERE A.CODUTE IN (${placeholders}) AND M.FLGENABLED = 1 AND COALESCE(G.FLGENABLED, 1) = 1${scopeFilter.sql}`, [...ids, ...scopeFilter.params])).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
732
779
|
const roleRows = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT
|
|
733
780
|
RU.CODUTE AS codice_utente,
|
|
734
781
|
R.CODRUO AS codice_ruolo,
|
|
@@ -742,8 +789,8 @@ let PermissionService = class PermissionService {
|
|
|
742
789
|
LEFT JOIN RUOLI_MNU RM ON R.CODRUO = RM.CODRUO
|
|
743
790
|
LEFT JOIN MENU M ON RM.CODMNU = M.CODMNU AND M.FLGENABLED = 1
|
|
744
791
|
LEFT JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
|
|
745
|
-
WHERE RU.CODUTE IN (${placeholders})`, ids)).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
746
|
-
const allActiveMenus = yield this.getAllActiveMenusAsGrants();
|
|
792
|
+
WHERE RU.CODUTE IN (${placeholders})${scopeFilter.sql}`, [...ids, ...scopeFilter.params])).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
793
|
+
const allActiveMenus = yield this.getAllActiveMenusAsGrants(scopeCodes);
|
|
747
794
|
const permissionsByUser = new Map();
|
|
748
795
|
for (const row of permissionRows) {
|
|
749
796
|
const { codiceUtente } = row, grant = __rest(row, ["codiceUtente"]);
|
|
@@ -781,6 +828,112 @@ let PermissionService = class PermissionService {
|
|
|
781
828
|
return result;
|
|
782
829
|
});
|
|
783
830
|
}
|
|
831
|
+
// -----------------------------------------------------------------------
|
|
832
|
+
// Scope applicativi: catalogo e associazioni menu/scope.
|
|
833
|
+
// -----------------------------------------------------------------------
|
|
834
|
+
normalizeScopeCode(value) {
|
|
835
|
+
const code = String(value !== null && value !== void 0 ? value : '').trim().toUpperCase();
|
|
836
|
+
if (!/^[A-Z][A-Z0-9_]{0,19}$/.test(code)) {
|
|
837
|
+
throw new common_1.BadRequestException('Codice scope non valido: usa lettere maiuscole, cifre e underscore (max 20 caratteri).');
|
|
838
|
+
}
|
|
839
|
+
return code;
|
|
840
|
+
}
|
|
841
|
+
assertScopeExists(codiceScope) {
|
|
842
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
843
|
+
if ((yield this.countWhere('SCOPES', 'CODICE', codiceScope)) === 0) {
|
|
844
|
+
throw new common_1.BadRequestException(`Lo scope ${codiceScope} non esiste.`);
|
|
845
|
+
}
|
|
846
|
+
});
|
|
847
|
+
}
|
|
848
|
+
assertMenuExists(codiceMenu) {
|
|
849
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
850
|
+
if ((yield this.countWhere('MENU', 'CODMNU', codiceMenu)) === 0) {
|
|
851
|
+
throw new common_1.BadRequestException(`Il menu ${codiceMenu} non esiste.`);
|
|
852
|
+
}
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
/** Catalogo degli scope applicativi (disponibile anche ai client per le etichette). */
|
|
856
|
+
getScopes() {
|
|
857
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
858
|
+
const rows = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT CODICE AS codice, NOME AS nome FROM SCOPES ORDER BY CODICE', []);
|
|
859
|
+
return rows.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
860
|
+
});
|
|
861
|
+
}
|
|
862
|
+
createScope(input) {
|
|
863
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
864
|
+
const codice = this.normalizeScopeCode(input.codice);
|
|
865
|
+
if ((yield this.countWhere('SCOPES', 'CODICE', codice)) > 0) {
|
|
866
|
+
throw new common_1.BadRequestException(`Lo scope ${codice} esiste gia.`);
|
|
867
|
+
}
|
|
868
|
+
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'INSERT INTO SCOPES (CODICE, NOME) VALUES (?, ?)', [codice, input.nome]);
|
|
869
|
+
});
|
|
870
|
+
}
|
|
871
|
+
updateScope(codiceScope, input) {
|
|
872
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
873
|
+
const codice = this.normalizeScopeCode(codiceScope);
|
|
874
|
+
yield this.assertScopeExists(codice);
|
|
875
|
+
if (input.nome === undefined)
|
|
876
|
+
return;
|
|
877
|
+
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'UPDATE SCOPES SET NOME = ? WHERE CODICE = ?', [input.nome, codice]);
|
|
878
|
+
});
|
|
879
|
+
}
|
|
880
|
+
/** Elimina lo scope; le associazioni menu/scope spariscono per FK ON DELETE CASCADE. */
|
|
881
|
+
deleteScope(codiceScope) {
|
|
882
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
883
|
+
const codice = this.normalizeScopeCode(codiceScope);
|
|
884
|
+
yield this.assertScopeExists(codice);
|
|
885
|
+
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'DELETE FROM SCOPES WHERE CODICE = ?', [codice]);
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
/** Scope associati a un menu. */
|
|
889
|
+
getMenuScopes(codiceMenu) {
|
|
890
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
891
|
+
const code = String(codiceMenu !== null && codiceMenu !== void 0 ? codiceMenu : '').trim().toUpperCase();
|
|
892
|
+
yield this.assertMenuExists(code);
|
|
893
|
+
const rows = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT CODICE_SCOPE FROM MENU_SCOPES WHERE CODICE_MENU = ? ORDER BY CODICE_SCOPE', [code]);
|
|
894
|
+
return rows
|
|
895
|
+
.map((row) => { var _a, _b; return String((_b = (_a = row.CODICE_SCOPE) !== null && _a !== void 0 ? _a : row.codiceScope) !== null && _b !== void 0 ? _b : '').trim(); })
|
|
896
|
+
.filter((value) => value.length > 0);
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
/** Sostituisce in modo atomico gli scope di un menu. */
|
|
900
|
+
setMenuScopes(codiceMenu, scopes) {
|
|
901
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
902
|
+
const code = String(codiceMenu !== null && codiceMenu !== void 0 ? codiceMenu : '').trim().toUpperCase();
|
|
903
|
+
yield this.assertMenuExists(code);
|
|
904
|
+
const normalized = Array.from(new Set((scopes !== null && scopes !== void 0 ? scopes : []).map((scope) => this.normalizeScopeCode(scope))));
|
|
905
|
+
for (const scope of normalized) {
|
|
906
|
+
yield this.assertScopeExists(scope);
|
|
907
|
+
}
|
|
908
|
+
const queries = [
|
|
909
|
+
{ query: 'DELETE FROM MENU_SCOPES WHERE CODICE_MENU = ?', params: [code] },
|
|
910
|
+
...normalized.map((scope) => ({
|
|
911
|
+
query: 'INSERT INTO MENU_SCOPES (CODICE_MENU, CODICE_SCOPE) VALUES (?, ?)',
|
|
912
|
+
params: [code, scope],
|
|
913
|
+
})),
|
|
914
|
+
];
|
|
915
|
+
yield Orm_1.Orm.executeMultiple(this.accessiOptions.databaseOptions, queries);
|
|
916
|
+
});
|
|
917
|
+
}
|
|
918
|
+
/** Sostituisce in modo atomico i menu di uno scope (assegnazione massiva). */
|
|
919
|
+
setScopeMenus(codiceScope, menus) {
|
|
920
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
921
|
+
const scope = this.normalizeScopeCode(codiceScope);
|
|
922
|
+
yield this.assertScopeExists(scope);
|
|
923
|
+
const normalized = Array.from(new Set((menus !== null && menus !== void 0 ? menus : []).map((menu) => String(menu !== null && menu !== void 0 ? menu : '').trim().toUpperCase()).filter(Boolean)));
|
|
924
|
+
for (const menu of normalized) {
|
|
925
|
+
yield this.assertMenuExists(menu);
|
|
926
|
+
}
|
|
927
|
+
const queries = [
|
|
928
|
+
{ query: 'DELETE FROM MENU_SCOPES WHERE CODICE_SCOPE = ?', params: [scope] },
|
|
929
|
+
...normalized.map((menu) => ({
|
|
930
|
+
query: 'INSERT INTO MENU_SCOPES (CODICE_MENU, CODICE_SCOPE) VALUES (?, ?)',
|
|
931
|
+
params: [menu, scope],
|
|
932
|
+
})),
|
|
933
|
+
];
|
|
934
|
+
yield Orm_1.Orm.executeMultiple(this.accessiOptions.databaseOptions, queries);
|
|
935
|
+
});
|
|
936
|
+
}
|
|
784
937
|
};
|
|
785
938
|
exports.PermissionService = PermissionService;
|
|
786
939
|
exports.PermissionService = PermissionService = __decorate([
|