emilsoftware-utilities 2.0.0-dev.23 → 2.0.0-dev.25
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 +147 -0
- package/dist/ContractGenerator.d.ts +4 -3
- package/dist/ContractGenerator.js +15 -5
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DailyFileTransport.d.ts +8 -2
- package/dist/DailyFileTransport.js +9 -2
- package/dist/DailyFileTransport.js.map +1 -1
- package/dist/DatabaseUpdater.js +8 -3
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/ExecutionTimeLogger.d.ts +2 -2
- package/dist/ExecutionTimeLogger.js +3 -2
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Logger.d.ts +22 -9
- package/dist/Logger.js +131 -54
- package/dist/Logger.js.map +1 -1
- package/dist/Orm.d.ts +26 -6
- package/dist/Orm.js +144 -40
- package/dist/Orm.js.map +1 -1
- package/dist/Utilities.d.ts +12 -7
- package/dist/Utilities.js +57 -22
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +9 -0
- package/dist/accessi-module/AccessiModule.js +12 -4
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/console.css +529 -281
- package/dist/accessi-module/Console/console.js +2081 -85
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Console/generated/accessiApi.d.ts +167 -1
- package/dist/accessi-module/Console/generated/accessiApi.js +156 -2
- package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +20 -8
- package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +8 -0
- package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/index.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/index.js +18 -0
- package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/help.d.ts +13 -0
- package/dist/accessi-module/Console/help.js +348 -0
- package/dist/accessi-module/Console/help.js.map +1 -0
- package/dist/accessi-module/Console/index.html +89 -21
- package/dist/accessi-module/Console/wiki.d.ts +52 -0
- package/dist/accessi-module/Console/wiki.js +689 -0
- package/dist/accessi-module/Console/wiki.js.map +1 -0
- package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +8 -1
- package/dist/accessi-module/Controllers/AccessiConsoleController.js +52 -15
- package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
- package/dist/accessi-module/Controllers/ConfiguratorController.js +6 -8
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
- package/dist/accessi-module/Controllers/EmailController.js +1 -1
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
- package/dist/accessi-module/Controllers/FiltriController.js +92 -4
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.d.ts +11 -0
- package/dist/accessi-module/Controllers/PermissionController.js +273 -8
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
- package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
- package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
- package/dist/accessi-module/Controllers/UserController.d.ts +2 -2
- package/dist/accessi-module/Controllers/UserController.js +25 -9
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
- package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
- package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
- package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
- package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.d.ts +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/MenuItem.js +1 -0
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +2 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Role.js.map +1 -1
- package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
- package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
- package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
- package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
- package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -1
- package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.js +4 -2
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/index.d.ts +2 -0
- package/dist/accessi-module/Dtos/index.js +2 -0
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +2 -2
- package/dist/accessi-module/Services/AuthService/AuthService.js +36 -36
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.d.ts +2 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +9 -6
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +10 -3
- package/dist/accessi-module/Services/FiltriService/FiltriService.js +64 -6
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +44 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +418 -110
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
- package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +23 -27
- package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +10 -3
- package/dist/accessi-module/Services/UserService/UserService.js +170 -84
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +9 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +76 -28
- 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 +9 -1
- package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
- package/dist/accessi-module/database-updates/optionalColumns.d.ts +2 -0
- package/dist/accessi-module/database-updates/optionalColumns.js +33 -1
- package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +7 -2
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +1 -0
- package/dist/accessi-module/federated-auth/FederatedAuthController.js +26 -0
- package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +6 -0
- package/dist/accessi-module/federated-auth/FederatedAuthService.js +28 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -1
- package/dist/accessi-module/index.d.ts +4 -1
- package/dist/accessi-module/index.js +8 -2
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.js +8 -5
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.d.ts +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.js +11 -7
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.js +8 -3
- package/dist/accessi-module/security/accessControl.js.map +1 -1
- package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
- package/dist/accessi-module/security/authenticatedToken.js +2 -1
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
- package/dist/accessi-module/security/passwordResetToken.d.ts +9 -3
- package/dist/accessi-module/security/passwordResetToken.js +9 -5
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.js +28 -8
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
- package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
- package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
- package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
- package/dist/allegati-module/AllegatiModule.d.ts +11 -0
- package/dist/allegati-module/AllegatiModule.js +11 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
- package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
- package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
- package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
- package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +101 -52
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
- package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
- package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
- package/dist/autobind.d.ts +10 -3
- package/dist/autobind.js +24 -9
- package/dist/autobind.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.25.tgz +0 -0
- package/dist/firebird-compat.d.ts +13 -0
- package/dist/firebird-compat.js +3 -2
- package/dist/firebird-compat.js.map +1 -1
- package/dist/scripts/generateAccessiWiki.d.ts +1 -0
- package/dist/scripts/generateAccessiWiki.js +131 -0
- package/dist/scripts/generateAccessiWiki.js.map +1 -0
- package/dist/swagger/SwaggerConfig.js +6 -3
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +19 -8
- package/dist/emilsoftware-utilities-2.0.0-dev.23.tgz +0 -0
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import type { AccessiOptions } from '../../AccessiModule';
|
|
2
2
|
import { TipoFiltro } from '../../Dtos/TipoFiltro';
|
|
3
|
-
import { FiltriUtente } from '../../Dtos';
|
|
3
|
+
import { CreateFilterTypeRequest, FiltriUtente, UpdateFilterTypeRequest } from '../../Dtos';
|
|
4
4
|
export declare class FiltriService {
|
|
5
5
|
private readonly accessiOptions;
|
|
6
6
|
private readonly logger;
|
|
7
7
|
constructor(accessiOptions: AccessiOptions);
|
|
8
8
|
/** Returns the enabled filter-type catalog used by legacy and configurator clients. */
|
|
9
9
|
getTipoFiltri(): Promise<TipoFiltro[]>;
|
|
10
|
+
private countWhere;
|
|
11
|
+
/** Creates a filter-type catalog entry. `TIPFIL` is the immutable primary key. */
|
|
12
|
+
createTipoFiltro(input: CreateFilterTypeRequest): Promise<void>;
|
|
13
|
+
/** Updates only the supplied fields of a filter-type entry. */
|
|
14
|
+
updateTipoFiltro(tipFil: number, input: UpdateFilterTypeRequest): Promise<void>;
|
|
15
|
+
/** Deletes a filter type only when no saved user filter references it. */
|
|
16
|
+
deleteTipoFiltro(tipFil: number): Promise<void>;
|
|
10
17
|
/** Returns filters for one user; omit the code only for trusted administrative reporting. */
|
|
11
|
-
getFiltriUser(codUte: number): Promise<FiltriUtente[]>;
|
|
12
|
-
/** Validate before a caller creates or updates
|
|
18
|
+
getFiltriUser(codUte: number | undefined): Promise<FiltriUtente[]>;
|
|
19
|
+
/** Validate before a caller creates or updates user data. */
|
|
13
20
|
validateSupportedFields(dto: Partial<FiltriUtente>, columns?: Set<string>): Promise<Set<string>>;
|
|
14
21
|
/**
|
|
15
22
|
* Upserts only supplied mapped fields. `undefined` leaves a field unchanged; `null` or an empty string clears it.
|
|
@@ -38,9 +38,9 @@ let FiltriService = FiltriService_1 = class FiltriService {
|
|
|
38
38
|
getTipoFiltri() {
|
|
39
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
40
|
try {
|
|
41
|
-
|
|
41
|
+
const getQuery = 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';
|
|
42
42
|
const params = [];
|
|
43
|
-
|
|
43
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, getQuery, params);
|
|
44
44
|
return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
45
45
|
}
|
|
46
46
|
catch (error) {
|
|
@@ -49,11 +49,68 @@ let FiltriService = FiltriService_1 = class FiltriService {
|
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
|
+
countWhere(table, column, value) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
var _a, _b, _c;
|
|
55
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT COUNT(*) FROM ${table} WHERE ${column} = ?`, [value]);
|
|
56
|
+
const raw = (_b = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a.COUNT) !== null && _b !== void 0 ? _b : (_c = result === null || result === void 0 ? void 0 : result[0]) === null || _c === void 0 ? void 0 : _c.count;
|
|
57
|
+
return typeof raw === 'number' ? raw : Number.parseInt(`${raw !== null && raw !== void 0 ? raw : '0'}`, 10);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** Creates a filter-type catalog entry. `TIPFIL` is the immutable primary key. */
|
|
61
|
+
createTipoFiltro(input) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
var _a, _b, _c;
|
|
64
|
+
if ((yield this.countWhere('FILTRI_TIPO', 'TIPFIL', input.tipFil)) > 0) {
|
|
65
|
+
throw new common_1.BadRequestException(`Il tipo filtro ${input.tipFil} esiste gia.`);
|
|
66
|
+
}
|
|
67
|
+
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, `INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)`, [input.tipFil, (_a = input.desFil) !== null && _a !== void 0 ? _a : null, (_b = input.fldFil) !== null && _b !== void 0 ? _b : null, (_c = input.flgEnabled) !== null && _c !== void 0 ? _c : 1]);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/** Updates only the supplied fields of a filter-type entry. */
|
|
71
|
+
updateTipoFiltro(tipFil, input) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
if ((yield this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {
|
|
74
|
+
throw new common_1.BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);
|
|
75
|
+
}
|
|
76
|
+
const sets = [];
|
|
77
|
+
const params = [];
|
|
78
|
+
if (input.desFil !== undefined) {
|
|
79
|
+
sets.push('DESFIL = ?');
|
|
80
|
+
params.push(input.desFil);
|
|
81
|
+
}
|
|
82
|
+
if (input.fldFil !== undefined) {
|
|
83
|
+
sets.push('FLDFIL = ?');
|
|
84
|
+
params.push(input.fldFil);
|
|
85
|
+
}
|
|
86
|
+
if (input.flgEnabled !== undefined) {
|
|
87
|
+
sets.push('FLGENABLED = ?');
|
|
88
|
+
params.push(input.flgEnabled);
|
|
89
|
+
}
|
|
90
|
+
if (sets.length === 0)
|
|
91
|
+
return;
|
|
92
|
+
params.push(tipFil);
|
|
93
|
+
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, `UPDATE FILTRI_TIPO SET ${sets.join(', ')} WHERE TIPFIL = ?`, params);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** Deletes a filter type only when no saved user filter references it. */
|
|
97
|
+
deleteTipoFiltro(tipFil) {
|
|
98
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
if ((yield this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {
|
|
100
|
+
throw new common_1.BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);
|
|
101
|
+
}
|
|
102
|
+
const used = yield this.countWhere('FILTRI', 'TIPFIL', tipFil);
|
|
103
|
+
if (used > 0) {
|
|
104
|
+
throw new common_1.BadRequestException(`Impossibile eliminare il tipo filtro ${tipFil}: ${used} filtri lo utilizzano.`);
|
|
105
|
+
}
|
|
106
|
+
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, `DELETE FROM FILTRI_TIPO WHERE TIPFIL = ?`, [tipFil]);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
52
109
|
/** Returns filters for one user; omit the code only for trusted administrative reporting. */
|
|
53
110
|
getFiltriUser(codUte) {
|
|
54
111
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
112
|
try {
|
|
56
|
-
|
|
113
|
+
const params = [];
|
|
57
114
|
const columns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI');
|
|
58
115
|
const aliases = { PROG: 'PROGRESSIVO', NUMREP: 'NUM_REP', IDXPERS: 'IDX_PERS', CODCLISUPER: 'COD_CLI_SUPER', CODAGE: 'COD_AGE', CODCLICOL: 'COD_CLI_COL', CODCLIENTI: 'COD_CLIENTI', TIPFIL: 'TIP_FIL', CODDIP: 'COD_DIP', IDXPOS: 'IDX_POS', CODVET: 'COD_VET' };
|
|
59
116
|
const selections = Object.values(Dtos_1.FILTRI_UTENTE_DB_MAPPING).map(cfg => (0, optionalColumns_1.optionalColumn)(columns, cfg.dbField, 'F', aliases[cfg.dbField], cfg.numeric));
|
|
@@ -66,7 +123,7 @@ let FiltriService = FiltriService_1 = class FiltriService {
|
|
|
66
123
|
getQuery += ' WHERE CODUTE = ?';
|
|
67
124
|
params.push(codUte);
|
|
68
125
|
}
|
|
69
|
-
|
|
126
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, getQuery, params);
|
|
70
127
|
return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
71
128
|
}
|
|
72
129
|
catch (error) {
|
|
@@ -74,7 +131,7 @@ let FiltriService = FiltriService_1 = class FiltriService {
|
|
|
74
131
|
}
|
|
75
132
|
});
|
|
76
133
|
}
|
|
77
|
-
/** Validate before a caller creates or updates
|
|
134
|
+
/** Validate before a caller creates or updates user data. */
|
|
78
135
|
validateSupportedFields(dto, columns) {
|
|
79
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
80
137
|
columns !== null && columns !== void 0 ? columns : (columns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI'));
|
|
@@ -129,7 +186,8 @@ let FiltriService = FiltriService_1 = class FiltriService {
|
|
|
129
186
|
this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte);
|
|
130
187
|
}
|
|
131
188
|
catch (error) {
|
|
132
|
-
|
|
189
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
190
|
+
throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${message}`);
|
|
133
191
|
}
|
|
134
192
|
});
|
|
135
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiltriService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/FiltriService/FiltriService.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Inject, Injectable } from '@nestjs/common';\nimport { getTableColumns, optionalColumn } from '../../database-updates/optionalColumns';\nimport type { AccessiOptions } from '../../AccessiModule';\nimport { TipoFiltro } from '../../Dtos/TipoFiltro';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport { Logger } from '../../../Logger';\nimport { FiltriUtente, FILTRI_UTENTE_DB_MAPPING } from '../../Dtos';\n\n@Injectable()\n/** Persists application-specific filter dimensions associated with an Accessi user. */\nexport class FiltriService {\n private readonly logger = new Logger(FiltriService.name);\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\n /** Returns the enabled filter-type catalog used by legacy and configurator clients. */\n public async getTipoFiltri(): Promise<TipoFiltro[]> {\n try {\n let getQuery =\n 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';\n const params = [];\n\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase);\n } catch (error) {\n this.logger.error('Errore durante il recupero dei tipi di filtri', error);\n throw error;\n }\n }\n\n /** Returns filters for one user; omit the code only for trusted administrative reporting. */\n public async getFiltriUser(codUte: number): Promise<FiltriUtente[]> {\n try {\n let params = [];\n\n const columns = await getTableColumns(this.accessiOptions, 'FILTRI');\n const aliases = { PROG: 'PROGRESSIVO', NUMREP: 'NUM_REP', IDXPERS: 'IDX_PERS', CODCLISUPER: 'COD_CLI_SUPER', CODAGE: 'COD_AGE', CODCLICOL: 'COD_CLI_COL', CODCLIENTI: 'COD_CLIENTI', TIPFIL: 'TIP_FIL', CODDIP: 'COD_DIP', IDXPOS: 'IDX_POS', CODVET: 'COD_VET' };\n const selections = Object.values(FILTRI_UTENTE_DB_MAPPING).map(cfg => optionalColumn(columns, cfg.dbField, 'F', aliases[cfg.dbField], cfg.numeric));\n let getQuery = `SELECT F.CODUTE AS COD_UTE, ${selections.join(', ')} FROM FILTRI F `;\n\n if (codUte === undefined) {\n this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');\n } else {\n this.logger.log('codUte passato, recupero i filtri dell utente ' + codUte);\n getQuery += ' WHERE CODUTE = ?';\n params.push(codUte);\n }\n\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase);\n } catch (error) {\n throw error;\n }\n }\n\n /** Validate before a caller creates or updates any user data. */\n public async validateSupportedFields(dto: Partial<FiltriUtente>, columns?: Set<string>): Promise<Set<string>> {\n columns ??= await getTableColumns(this.accessiOptions, 'FILTRI');\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\n const value = dto[key];\n if (value !== undefined && value !== null && value !== '' && !columns.has(cfg.dbField)) {\n throw new BadRequestException(`Filtro applicativo non configurato: FILTRI.${cfg.dbField}`);\n }\n }\n return columns;\n }\n\n /**\n * Upserts only supplied mapped fields. `undefined` leaves a field unchanged; `null` or an empty string clears it.\n * The mapping is centralized in `FILTRI_UTENTE_DB_MAPPING` to keep DTO and database names decoupled.\n */\n public async upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void> {\n try {\n if (!codUte || codUte <= 0) throw new Error('Codice utente non valido');\n\n const columns = await this.validateSupportedFields(dto);\n const dbFields: string[] = ['CODUTE'];\n const values: any[] = [codUte];\n\n //aggiungo solo campi valorizzati\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\n const value = (dto as any)[key];\n\n //gestione campi vuoti, null o undefined\n if (value === undefined || !columns.has(cfg.dbField)) {\n continue\n }\n\n if (value === null || value === '') {\n dbFields.push(cfg.dbField);\n values.push(null);\n continue\n }\n if (cfg.numeric && typeof value !== 'number') {\n throw new Error(`Il campo ${key} deve essere un numero`);\n }\n if (!cfg.numeric && typeof value !== 'string') {\n throw new Error(`Il campo ${key} deve essere una stringa`);\n }\n dbFields.push(cfg.dbField);\n values.push(value);\n }\n\n if (dbFields.length === 1) {\n this.logger.log(`Nessun campo valido da inserire per l'utente ${codUte}`)\n return\n }\n\n let sSql = `UPDATE OR INSERT INTO FILTRI (${dbFields.join(',')}) VALUES (${values.map(() => '?').join(', ')}) MATCHING (CODUTE)`\n await Orm.execute(this.accessiOptions.databaseOptions, sSql, values)\n\n this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte)\n\n } catch (error) {\n throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${error.message}`);\n\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FiltriService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/FiltriService/FiltriService.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Inject, Injectable } from '@nestjs/common';\nimport { getTableColumns, optionalColumn } from '../../database-updates/optionalColumns';\nimport type { AccessiOptions } from '../../AccessiModule';\nimport { TipoFiltro } from '../../Dtos/TipoFiltro';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport { Logger } from '../../../Logger';\nimport {\n CreateFilterTypeRequest,\n FiltriUtente,\n FILTRI_UTENTE_DB_MAPPING,\n UpdateFilterTypeRequest,\n} from '../../Dtos';\n\n@Injectable()\n/** Persists application-specific filter dimensions associated with an Accessi user. */\nexport class FiltriService {\n private readonly logger = new Logger(FiltriService.name);\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\n /** Returns the enabled filter-type catalog used by legacy and configurator clients. */\n public async getTipoFiltri(): Promise<TipoFiltro[]> {\n try {\n const getQuery =\n 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';\n const params: unknown[] = [];\n\n const result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase) as unknown as TipoFiltro[];\n } catch (error) {\n this.logger.error('Errore durante il recupero dei tipi di filtri', error);\n throw error;\n }\n }\n\n private async countWhere(table: string, column: string, value: unknown): Promise<number> {\n const result = await Orm.query(\n this.accessiOptions.databaseOptions,\n `SELECT COUNT(*) FROM ${table} WHERE ${column} = ?`,\n [value],\n );\n const raw = (result?.[0] as Record<string, unknown> | undefined)?.COUNT\n ?? (result?.[0] as Record<string, unknown> | undefined)?.count;\n return typeof raw === 'number' ? raw : Number.parseInt(`${raw ?? '0'}`, 10);\n }\n\n /** Creates a filter-type catalog entry. `TIPFIL` is the immutable primary key. */\n public async createTipoFiltro(input: CreateFilterTypeRequest): Promise<void> {\n if ((await this.countWhere('FILTRI_TIPO', 'TIPFIL', input.tipFil)) > 0) {\n throw new BadRequestException(`Il tipo filtro ${input.tipFil} esiste gia.`);\n }\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n `INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)`,\n [input.tipFil, input.desFil ?? null, input.fldFil ?? null, input.flgEnabled ?? 1],\n );\n }\n\n /** Updates only the supplied fields of a filter-type entry. */\n public async updateTipoFiltro(tipFil: number, input: UpdateFilterTypeRequest): Promise<void> {\n if ((await this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {\n throw new BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);\n }\n\n const sets: string[] = [];\n const params: unknown[] = [];\n if (input.desFil !== undefined) {\n sets.push('DESFIL = ?');\n params.push(input.desFil);\n }\n if (input.fldFil !== undefined) {\n sets.push('FLDFIL = ?');\n params.push(input.fldFil);\n }\n if (input.flgEnabled !== undefined) {\n sets.push('FLGENABLED = ?');\n params.push(input.flgEnabled);\n }\n if (sets.length === 0) return;\n\n params.push(tipFil);\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n `UPDATE FILTRI_TIPO SET ${sets.join(', ')} WHERE TIPFIL = ?`,\n params,\n );\n }\n\n /** Deletes a filter type only when no saved user filter references it. */\n public async deleteTipoFiltro(tipFil: number): Promise<void> {\n if ((await this.countWhere('FILTRI_TIPO', 'TIPFIL', tipFil)) === 0) {\n throw new BadRequestException(`Il tipo filtro ${tipFil} non esiste.`);\n }\n const used = await this.countWhere('FILTRI', 'TIPFIL', tipFil);\n if (used > 0) {\n throw new BadRequestException(\n `Impossibile eliminare il tipo filtro ${tipFil}: ${used} filtri lo utilizzano.`,\n );\n }\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n `DELETE FROM FILTRI_TIPO WHERE TIPFIL = ?`,\n [tipFil],\n );\n }\n\n /** Returns filters for one user; omit the code only for trusted administrative reporting. */\n public async getFiltriUser(codUte: number | undefined): Promise<FiltriUtente[]> {\n try {\n const params: unknown[] = [];\n\n const columns = await getTableColumns(this.accessiOptions, 'FILTRI');\n const aliases = { PROG: 'PROGRESSIVO', NUMREP: 'NUM_REP', IDXPERS: 'IDX_PERS', CODCLISUPER: 'COD_CLI_SUPER', CODAGE: 'COD_AGE', CODCLICOL: 'COD_CLI_COL', CODCLIENTI: 'COD_CLIENTI', TIPFIL: 'TIP_FIL', CODDIP: 'COD_DIP', IDXPOS: 'IDX_POS', CODVET: 'COD_VET' };\n const selections = Object.values(FILTRI_UTENTE_DB_MAPPING).map(cfg => optionalColumn(columns, cfg.dbField, 'F', aliases[cfg.dbField], cfg.numeric));\n let getQuery = `SELECT F.CODUTE AS COD_UTE, ${selections.join(', ')} FROM FILTRI F `;\n\n if (codUte === undefined) {\n this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');\n } else {\n this.logger.log('codUte passato, recupero i filtri dell utente ' + codUte);\n getQuery += ' WHERE CODUTE = ?';\n params.push(codUte);\n }\n\n const result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase) as unknown as FiltriUtente[];\n } catch (error) {\n throw error;\n }\n }\n\n /** Validate before a caller creates or updates user data. */\n public async validateSupportedFields(dto: Partial<FiltriUtente>, columns?: Set<string>): Promise<Set<string>> {\n columns ??= await getTableColumns(this.accessiOptions, 'FILTRI');\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\n const value = (dto as Record<string, unknown>)[key];\n if (value !== undefined && value !== null && value !== '' && !columns.has(cfg.dbField)) {\n throw new BadRequestException(`Filtro applicativo non configurato: FILTRI.${cfg.dbField}`);\n }\n }\n return columns;\n }\n\n /**\n * Upserts only supplied mapped fields. `undefined` leaves a field unchanged; `null` or an empty string clears it.\n * The mapping is centralized in `FILTRI_UTENTE_DB_MAPPING` to keep DTO and database names decoupled.\n */\n public async upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void> {\n try {\n if (!codUte || codUte <= 0) throw new Error('Codice utente non valido');\n\n const columns = await this.validateSupportedFields(dto);\n const dbFields: string[] = ['CODUTE'];\n const values: unknown[] = [codUte];\n\n //aggiungo solo campi valorizzati\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\n const value = (dto as Record<string, unknown>)[key];\n\n //gestione campi vuoti, null o undefined\n if (value === undefined || !columns.has(cfg.dbField)) {\n continue\n }\n\n if (value === null || value === '') {\n dbFields.push(cfg.dbField);\n values.push(null);\n continue\n }\n if (cfg.numeric && typeof value !== 'number') {\n throw new Error(`Il campo ${key} deve essere un numero`);\n }\n if (!cfg.numeric && typeof value !== 'string') {\n throw new Error(`Il campo ${key} deve essere una stringa`);\n }\n dbFields.push(cfg.dbField);\n values.push(value);\n }\n\n if (dbFields.length === 1) {\n this.logger.log(`Nessun campo valido da inserire per l'utente ${codUte}`)\n return\n }\n\n let sSql = `UPDATE OR INSERT INTO FILTRI (${dbFields.join(',')}) VALUES (${values.map(() => '?').join(', ')}) MATCHING (CODUTE)`\n await Orm.execute(this.accessiOptions.databaseOptions, sSql, values)\n\n this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte)\n\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${message}`);\n }\n }\n}\n"]}
|
|
@@ -4,18 +4,32 @@ import { AbilitazioneMenu } from "../../Dtos/AbilitazioneMenu";
|
|
|
4
4
|
import { GroupWithMenusEntity } from "../../Dtos/GetGroupsWithMenusResponse";
|
|
5
5
|
import { MenuEntity } from "../../Dtos/GetMenusResponse";
|
|
6
6
|
import { Role } from "../../Dtos/Role";
|
|
7
|
+
import { CreateMenuGroupRequest, CreateMenuRequest, CreateMenuTypeRequest, MenuTypeEntity, UpdateMenuGroupRequest, UpdateMenuRequest, UpdateMenuTypeRequest } from "../../Dtos/CatalogDtos";
|
|
8
|
+
/** Struttura storica menu/gruppi accettata dall'API legacy `addAbilitazioni`. */
|
|
9
|
+
type LegacyMenuGroup = {
|
|
10
|
+
menu?: Array<{
|
|
11
|
+
flgChk?: unknown;
|
|
12
|
+
codiceMenu?: unknown;
|
|
13
|
+
tipoAbilitazione?: unknown;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
7
16
|
export declare class PermissionService {
|
|
8
17
|
private readonly accessiOptions;
|
|
9
18
|
constructor(accessiOptions: AccessiOptions);
|
|
10
19
|
private getCountFromResult;
|
|
20
|
+
private extractIntegerColumn;
|
|
11
21
|
private getAllActiveMenusAsGrants;
|
|
12
22
|
private getUserDirectPermissions;
|
|
13
23
|
private getUserRoles;
|
|
24
|
+
/** Costruisce l'albero ruoli/menu a partire dalle righe (riusato da lettura singola e batch). */
|
|
25
|
+
private assembleRoles;
|
|
26
|
+
/** Regola di composizione storica: grant diretti prevalgono, i ruoli si sommano per livello massimo. */
|
|
27
|
+
private composeGrants;
|
|
14
28
|
/**
|
|
15
29
|
* API legacy per salvare grant dalla struttura storica menu/gruppi.
|
|
16
30
|
* Sostituisce tutti i grant diretti dell'utente; per le nuove integrazioni preferire `assignPermissionsToUser`.
|
|
17
31
|
*/
|
|
18
|
-
addAbilitazioni(codiceUtente: number, menuAbilitazioni:
|
|
32
|
+
addAbilitazioni(codiceUtente: number, menuAbilitazioni: LegacyMenuGroup[]): Promise<void>;
|
|
19
33
|
/** Rimuove tutti i grant diretti, senza toccare ruoli o menu ereditati dai ruoli. */
|
|
20
34
|
resetAbilitazioni(codiceUtente: number): Promise<void>;
|
|
21
35
|
/**
|
|
@@ -44,6 +58,23 @@ export declare class PermissionService {
|
|
|
44
58
|
* i flussi applicativi di autorizzazione devono usare il comportamento predefinito, che nasconde voci disabilitate.
|
|
45
59
|
*/
|
|
46
60
|
getGroupsWithMenus(includeDisabled?: boolean): Promise<GroupWithMenusEntity[]>;
|
|
61
|
+
private countWhere;
|
|
62
|
+
private assertMenuGroupExists;
|
|
63
|
+
private assertMenuTypeExists;
|
|
64
|
+
/** Catalogo completo dei tipi menu, usato dagli editor di configurazione. */
|
|
65
|
+
getMenuTypes(): Promise<MenuTypeEntity[]>;
|
|
66
|
+
createMenuType(input: CreateMenuTypeRequest): Promise<void>;
|
|
67
|
+
updateMenuType(codiceTipo: string, input: UpdateMenuTypeRequest): Promise<void>;
|
|
68
|
+
/** Elimina un tipo menu solo se nessun menu lo utilizza (la FK lo impedirebbe comunque). */
|
|
69
|
+
deleteMenuType(codiceTipo: string): Promise<void>;
|
|
70
|
+
createMenuGroup(input: CreateMenuGroupRequest): Promise<void>;
|
|
71
|
+
updateMenuGroup(codiceGruppo: string, input: UpdateMenuGroupRequest): Promise<void>;
|
|
72
|
+
/** Elimina un gruppo solo se non contiene menu, per non lasciare menu orfani. */
|
|
73
|
+
deleteMenuGroup(codiceGruppo: string): Promise<void>;
|
|
74
|
+
createMenu(input: CreateMenuRequest): Promise<void>;
|
|
75
|
+
updateMenu(codiceMenu: string, input: UpdateMenuRequest): Promise<void>;
|
|
76
|
+
/** Elimina menu, grant utente e associazioni ruolo in un'unica transazione. */
|
|
77
|
+
deleteMenu(codiceMenu: string): Promise<void>;
|
|
47
78
|
/**
|
|
48
79
|
* Calcola l'autorizzazione effettiva: grant diretti e grant dei ruoli sono uniti per codice menu.
|
|
49
80
|
* Per compatibilita storica un grant diretto prevale su quello del ruolo; i superutenti ricevono tutti i menu attivi.
|
|
@@ -53,4 +84,16 @@ export declare class PermissionService {
|
|
|
53
84
|
ruoli: Role[];
|
|
54
85
|
grants: AbilitazioneMenu[];
|
|
55
86
|
}>;
|
|
87
|
+
private isSuperFlag;
|
|
88
|
+
/**
|
|
89
|
+
* Versione batch di `getUserRolesAndGrants`: esegue un numero costante di query per N utenti
|
|
90
|
+
* (invece di N set di query) e restituisce mappa per codice utente. Stessa composizione della
|
|
91
|
+
* lettura singola.
|
|
92
|
+
*/
|
|
93
|
+
getUsersRolesAndGrants(codiciUtente: number[]): Promise<Map<number, {
|
|
94
|
+
abilitazioni: AbilitazioneMenu[];
|
|
95
|
+
ruoli: Role[];
|
|
96
|
+
grants: AbilitazioneMenu[];
|
|
97
|
+
}>>;
|
|
56
98
|
}
|
|
99
|
+
export {};
|