emilsoftware-utilities 2.0.0-dev.32 → 2.0.0-dev.34
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/Console/console.css +10 -0
- package/dist/accessi-module/Console/console.js +102 -19
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Console/generated/accessiApi.d.ts +2 -2
- package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +0 -5
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +0 -2
- package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +0 -2
- package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +0 -2
- package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +0 -2
- package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +0 -5
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/userDto.d.ts +0 -4
- package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -1
- package/dist/accessi-module/Console/index.html +6 -0
- package/dist/accessi-module/Console/wiki.js +7 -4
- package/dist/accessi-module/Console/wiki.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
- package/dist/accessi-module/Controllers/ConfiguratorController.js +4 -17
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.js +4 -4
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.js +14 -14
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/ServiceTokenController.js +1 -1
- package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.js +8 -8
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/CatalogDtos.d.ts +0 -2
- package/dist/accessi-module/Dtos/CatalogDtos.js +0 -14
- package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.d.ts +0 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js +0 -8
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.d.ts +0 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js +0 -8
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.d.ts +0 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +0 -9
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.d.ts +0 -2
- package/dist/accessi-module/Dtos/UserDto.js +0 -16
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.js +0 -2
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +5 -13
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +0 -3
- package/dist/accessi-module/Services/UserService/UserService.js +2 -41
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +7 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.d.ts +13 -2
- package/dist/accessi-module/database-updates/accessiSchema.js +15 -7
- package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthController.js +15 -15
- package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -1
- package/dist/accessi-module/security/accessControl.d.ts +11 -2
- package/dist/accessi-module/security/accessControl.js +28 -4
- package/dist/accessi-module/security/accessControl.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.34.tgz +0 -0
- package/package.json +2 -2
- package/dist/emilsoftware-utilities-2.0.0-dev.32.tgz +0 -0
|
@@ -60,7 +60,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
60
60
|
updateRole(request, codiceRuolo, role, res) {
|
|
61
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
62
|
try {
|
|
63
|
-
(0, accessControl_1.
|
|
63
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono modificare i ruoli.');
|
|
64
64
|
if (Number.isNaN(codiceRuolo))
|
|
65
65
|
throw new common_1.BadRequestException('Il codice del ruolo e obbligatorio.');
|
|
66
66
|
if (!role.descrizioneRuolo)
|
|
@@ -79,7 +79,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
79
79
|
createRole(request, res, role) {
|
|
80
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
81
|
try {
|
|
82
|
-
(0, accessControl_1.
|
|
82
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono creare ruoli.');
|
|
83
83
|
if (!role)
|
|
84
84
|
throw new common_1.BadRequestException('Il ruolo non puo essere vuoto.');
|
|
85
85
|
if (!role.descrizioneRuolo)
|
|
@@ -98,7 +98,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
98
98
|
assignRolesToUser(request, res, codiceUtente, assignRolesRequest) {
|
|
99
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
100
|
try {
|
|
101
|
-
(0, accessControl_1.
|
|
101
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono assegnare ruoli agli utenti.');
|
|
102
102
|
yield this.permissionService.assignRolesToUser(codiceUtente, assignRolesRequest.roles);
|
|
103
103
|
const responseMessage = assignRolesRequest.roles.length === 0
|
|
104
104
|
? `Tutti i ruoli sono stati rimossi dall'utente ${codiceUtente}.`
|
|
@@ -113,7 +113,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
113
113
|
assignPermissionsToUser(request, res, codiceUtente, assignPermissionsRequest) {
|
|
114
114
|
return __awaiter(this, void 0, void 0, function* () {
|
|
115
115
|
try {
|
|
116
|
-
(0, accessControl_1.
|
|
116
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono assegnare permessi agli utenti.');
|
|
117
117
|
yield this.permissionService.assignPermissionsToUser(codiceUtente, assignPermissionsRequest.permissions);
|
|
118
118
|
const responseMessage = assignPermissionsRequest.permissions.length === 0
|
|
119
119
|
? `Tutte le abilitazioni sono state rimosse dall'utente ${codiceUtente}.`
|
|
@@ -128,7 +128,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
128
128
|
deleteRole(request, codiceRuolo, res) {
|
|
129
129
|
return __awaiter(this, void 0, void 0, function* () {
|
|
130
130
|
try {
|
|
131
|
-
(0, accessControl_1.
|
|
131
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono eliminare ruoli.');
|
|
132
132
|
yield this.permissionService.deleteRole(codiceRuolo);
|
|
133
133
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il ruolo ${codiceRuolo} e' stato eliminato con successo.`);
|
|
134
134
|
}
|
|
@@ -179,7 +179,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
179
179
|
createMenu(request, body, res) {
|
|
180
180
|
return __awaiter(this, void 0, void 0, function* () {
|
|
181
181
|
try {
|
|
182
|
-
(0, accessControl_1.
|
|
182
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono creare menu.');
|
|
183
183
|
yield this.permissionService.createMenu(body);
|
|
184
184
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il menu ${body.codiceMenu} e' stato creato con successo.`, common_1.HttpStatus.CREATED);
|
|
185
185
|
}
|
|
@@ -191,7 +191,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
191
191
|
updateMenu(request, codiceMenu, body, res) {
|
|
192
192
|
return __awaiter(this, void 0, void 0, function* () {
|
|
193
193
|
try {
|
|
194
|
-
(0, accessControl_1.
|
|
194
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono modificare menu.');
|
|
195
195
|
yield this.permissionService.updateMenu(codiceMenu, body);
|
|
196
196
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il menu ${codiceMenu} e' stato aggiornato con successo.`);
|
|
197
197
|
}
|
|
@@ -203,7 +203,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
203
203
|
deleteMenu(request, codiceMenu, res) {
|
|
204
204
|
return __awaiter(this, void 0, void 0, function* () {
|
|
205
205
|
try {
|
|
206
|
-
(0, accessControl_1.
|
|
206
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono eliminare menu.');
|
|
207
207
|
yield this.permissionService.deleteMenu(codiceMenu);
|
|
208
208
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il menu ${codiceMenu} e' stato eliminato con successo.`);
|
|
209
209
|
}
|
|
@@ -215,7 +215,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
215
215
|
createMenuGroup(request, body, res) {
|
|
216
216
|
return __awaiter(this, void 0, void 0, function* () {
|
|
217
217
|
try {
|
|
218
|
-
(0, accessControl_1.
|
|
218
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono creare gruppi.');
|
|
219
219
|
yield this.permissionService.createMenuGroup(body);
|
|
220
220
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il gruppo ${body.codiceGruppo} e' stato creato con successo.`, common_1.HttpStatus.CREATED);
|
|
221
221
|
}
|
|
@@ -227,7 +227,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
227
227
|
updateMenuGroup(request, codiceGruppo, body, res) {
|
|
228
228
|
return __awaiter(this, void 0, void 0, function* () {
|
|
229
229
|
try {
|
|
230
|
-
(0, accessControl_1.
|
|
230
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono modificare gruppi.');
|
|
231
231
|
yield this.permissionService.updateMenuGroup(codiceGruppo, body);
|
|
232
232
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il gruppo ${codiceGruppo} e' stato aggiornato con successo.`);
|
|
233
233
|
}
|
|
@@ -239,7 +239,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
239
239
|
deleteMenuGroup(request, codiceGruppo, res) {
|
|
240
240
|
return __awaiter(this, void 0, void 0, function* () {
|
|
241
241
|
try {
|
|
242
|
-
(0, accessControl_1.
|
|
242
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono eliminare gruppi.');
|
|
243
243
|
yield this.permissionService.deleteMenuGroup(codiceGruppo);
|
|
244
244
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il gruppo ${codiceGruppo} e' stato eliminato con successo.`);
|
|
245
245
|
}
|
|
@@ -251,7 +251,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
251
251
|
createMenuType(request, body, res) {
|
|
252
252
|
return __awaiter(this, void 0, void 0, function* () {
|
|
253
253
|
try {
|
|
254
|
-
(0, accessControl_1.
|
|
254
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono creare tipi menu.');
|
|
255
255
|
yield this.permissionService.createMenuType(body);
|
|
256
256
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il tipo menu ${body.codiceTipo} e' stato creato con successo.`, common_1.HttpStatus.CREATED);
|
|
257
257
|
}
|
|
@@ -263,7 +263,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
263
263
|
updateMenuType(request, codiceTipo, body, res) {
|
|
264
264
|
return __awaiter(this, void 0, void 0, function* () {
|
|
265
265
|
try {
|
|
266
|
-
(0, accessControl_1.
|
|
266
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono modificare tipi menu.');
|
|
267
267
|
yield this.permissionService.updateMenuType(codiceTipo, body);
|
|
268
268
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il tipo menu ${codiceTipo} e' stato aggiornato con successo.`);
|
|
269
269
|
}
|
|
@@ -275,7 +275,7 @@ let PermissionController = PermissionController_1 = class PermissionController {
|
|
|
275
275
|
deleteMenuType(request, codiceTipo, res) {
|
|
276
276
|
return __awaiter(this, void 0, void 0, function* () {
|
|
277
277
|
try {
|
|
278
|
-
(0, accessControl_1.
|
|
278
|
+
(0, accessControl_1.ensureAdmin)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono eliminare tipi menu.');
|
|
279
279
|
yield this.permissionService.deleteMenuType(codiceTipo);
|
|
280
280
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Il tipo menu ${codiceTipo} e' stato eliminato con successo.`);
|
|
281
281
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/PermissionController.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadRequestException,\n Body,\n Controller,\n Delete,\n Get,\n HttpStatus,\n Param,\n ParseIntPipe,\n Post,\n Put,\n Query,\n Req,\n Res,\n UseGuards,\n} from '@nestjs/common';\nimport {\n ApiBearerAuth,\n ApiBody,\n ApiInternalServerErrorResponse,\n ApiOkResponse,\n ApiOperation,\n ApiParam,\n ApiQuery,\n ApiResponse,\n ApiTags,\n} from '@nestjs/swagger';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport { ActionResponse, ErrorResponse } from '../Dtos/BaseResponse';\nimport { AssignPermissionsToUserRequest } from '../Dtos/AssignPermissionsToUserRequest';\nimport { AssignRolesToUserRequest } from '../Dtos/AssignRolesToUserRequest';\nimport {\n CreateMenuGroupRequest,\n CreateMenuRequest,\n CreateMenuTypeRequest,\n GetMenuTypesResponse,\n UpdateMenuGroupRequest,\n UpdateMenuRequest,\n UpdateMenuTypeRequest,\n} from '../Dtos/CatalogDtos';\nimport { GetGroupsWithMenusResponse } from '../Dtos/GetGroupsWithMenusResponse';\nimport { GetMenusResponse } from '../Dtos/GetMenusResponse';\nimport { GetRolesResponse } from '../Dtos/GetRolesResponse';\nimport { Role } from '../Dtos/Role';\nimport { UserGrantsResponse } from '../Dtos/UserGrantsResponse';\nimport { PermissionService } from '../Services/PermissionService/PermissionService';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport {\n ensureSelfOrSuperUser,\n ensureSuperUser,\n getAuthenticatedAccessiUser,\n} from '../security/accessControl';\n\n@ApiTags('Permission')\n@ApiBearerAuth()\n@Controller('accessi/permission')\n@UseGuards(JwtSimpleGuard)\n/**\n * API amministrative per ruoli, grant e catalogo menu. Le assegnazioni sono sostitutive, non incrementali:\n * il client deve inviare l'intera lista desiderata per non rimuovere voci involontariamente.\n */\nexport class PermissionController {\n constructor(private readonly permissionService: PermissionService) {}\n\n private sendControllerError(res: Response, error: unknown) {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, PermissionController.name);\n }\n\n @ApiOperation({\n summary: 'Ritorna i ruoli disponibili con i relativi menu',\n operationId: 'getRoles',\n description: 'Recupera tutti i ruoli presenti nel sistema con le relative voci di menu.',\n })\n @ApiOkResponse({ description: 'Elenco dei ruoli con i rispettivi menu', type: GetRolesResponse })\n @ApiInternalServerErrorResponse({ description: 'Errore interno del server', type: ErrorResponse })\n @ApiResponse({ status: HttpStatus.OK, description: 'Lista dei ruoli restituita con successo.', type: GetRolesResponse })\n @ApiResponse({\n status: HttpStatus.INTERNAL_SERVER_ERROR,\n description: 'Errore interno del server durante il recupero dei ruoli.',\n type: ErrorResponse,\n })\n @Get('roles')\n async getRoles(@Res() res: Response): Promise<Response> {\n try {\n const roles = await this.permissionService.getRolesWithMenus();\n return RestUtilities.sendBaseResponse(res, roles);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un ruolo esistente', operationId: 'updateRole' })\n @ApiParam({\n name: 'codiceRuolo',\n description: 'Codice identificativo del ruolo da aggiornare',\n required: true,\n example: 101,\n type: Number,\n })\n @ApiBody({\n description: 'Dati aggiornati del ruolo',\n type: Role,\n })\n @ApiResponse({ status: 200, description: 'Il ruolo e stato aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('update-role/:codiceRuolo')\n async updateRole(\n @Req() request: Request,\n @Param('codiceRuolo', ParseIntPipe) codiceRuolo: number,\n @Body() role: Role,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono modificare i ruoli.',\n );\n\n if (Number.isNaN(codiceRuolo)) throw new BadRequestException('Il codice del ruolo e obbligatorio.');\n if (!role.descrizioneRuolo) throw new BadRequestException('La descrizione del ruolo non puo essere vuota.');\n if (!role.menu || role.menu.length === 0) {\n throw new BadRequestException('Il ruolo deve avere almeno un menu.');\n }\n\n await this.permissionService.updateOrInsertRole(role, codiceRuolo);\n return RestUtilities.sendOKMessage(\n res,\n `Il ruolo ${codiceRuolo} e' stato aggiornato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo ruolo', operationId: 'createRole' })\n @ApiResponse({ status: 201, description: 'Il ruolo e stato creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBody({\n description: 'Dati del nuovo ruolo',\n required: true,\n type: Role,\n })\n @Post('create-role')\n async createRole(@Req() request: Request, @Res() res: Response, @Body() role: Role) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono creare ruoli.',\n );\n\n if (!role) throw new BadRequestException('Il ruolo non puo essere vuoto.');\n if (!role.descrizioneRuolo) throw new BadRequestException('La descrizione del ruolo non puo essere vuota.');\n if (!role.menu || role.menu.length === 0) {\n throw new BadRequestException('Il ruolo deve avere almeno un menu.');\n }\n\n await this.permissionService.updateOrInsertRole(role);\n return RestUtilities.sendOKMessage(res, 'Il ruolo e stato creato con successo.', HttpStatus.CREATED);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Assegna piu ruoli a un utente', operationId: 'assignRolesToUser' })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente a cui assegnare i ruoli\",\n required: true,\n example: 22,\n })\n @ApiBody({\n type: AssignRolesToUserRequest,\n description: \"Lista dei ruoli da assegnare all'utente\",\n })\n @ApiResponse({ status: 200, description: \"Ruoli assegnati con successo all'utente\", type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('assign-roles/:codiceUtente')\n async assignRolesToUser(\n @Req() request: Request,\n @Res() res: Response,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() assignRolesRequest: AssignRolesToUserRequest,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono assegnare ruoli agli utenti.',\n );\n\n await this.permissionService.assignRolesToUser(codiceUtente, assignRolesRequest.roles);\n const responseMessage =\n assignRolesRequest.roles.length === 0\n ? `Tutti i ruoli sono stati rimossi dall'utente ${codiceUtente}.`\n : `I ruoli ${assignRolesRequest.roles.join(', ')} sono stati assegnati all'utente ${codiceUtente}.`;\n return RestUtilities.sendOKMessage(\n res,\n responseMessage,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Assegna abilitazioni dirette a un utente',\n operationId: 'assignPermissionsToUser',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente a cui assegnare le abilitazioni\",\n required: true,\n example: 22,\n })\n @ApiBody({\n type: AssignPermissionsToUserRequest,\n description: \"Lista delle abilitazioni da assegnare all'utente\",\n })\n @ApiResponse({ status: 200, description: \"Abilitazioni assegnate con successo all'utente\", type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('assign-permissions/:codiceUtente')\n async assignPermissionsToUser(\n @Req() request: Request,\n @Res() res: Response,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() assignPermissionsRequest: AssignPermissionsToUserRequest,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono assegnare permessi agli utenti.',\n );\n\n await this.permissionService.assignPermissionsToUser(\n codiceUtente,\n assignPermissionsRequest.permissions,\n );\n const responseMessage =\n assignPermissionsRequest.permissions.length === 0\n ? `Tutte le abilitazioni sono state rimosse dall'utente ${codiceUtente}.`\n : `Le abilitazioni sono state assegnate all'utente ${codiceUtente}.`;\n return RestUtilities.sendOKMessage(\n res,\n responseMessage,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un ruolo esistente', operationId: 'deleteRole' })\n @ApiParam({\n name: 'codiceRuolo',\n description: 'Codice identificativo del ruolo da eliminare',\n required: true,\n example: 382,\n type: Number,\n })\n @ApiResponse({ status: 200, description: 'Ruolo eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore nei parametri della richiesta', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('delete-role/:codiceRuolo')\n async deleteRole(\n @Req() request: Request,\n @Param('codiceRuolo', ParseIntPipe) codiceRuolo: number,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono eliminare ruoli.',\n );\n\n await this.permissionService.deleteRole(codiceRuolo);\n return RestUtilities.sendOKMessage(\n res,\n `Il ruolo ${codiceRuolo} e' stato eliminato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Recupera tutti i menu disponibili', operationId: 'getMenus' })\n @ApiOkResponse({ description: 'Elenco menu', type: GetMenusResponse })\n @ApiResponse({ status: 200, description: 'Lista dei menu recuperata con successo', type: GetMenusResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Get('menus')\n async getMenus(@Res() res: Response) {\n try {\n const menus = await this.permissionService.getMenus();\n return RestUtilities.sendBaseResponse(res, menus);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Recupera tutti i gruppi disponibili con i relativi menu',\n operationId: 'getGroupsWithMenus',\n })\n @ApiOkResponse({\n description: 'Elenco gruppi con relativi menu',\n type: GetGroupsWithMenusResponse,\n })\n @ApiResponse({ status: 200, description: 'Lista dei menu recuperata con successo', type: GetGroupsWithMenusResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiQuery({\n name: 'includeDisabled',\n required: false,\n type: Boolean,\n description: 'Quando true ritorna anche i menu e gruppi disabilitati.',\n })\n @Get('groups-with-menus')\n async getGroupsWithMenus(@Query('includeDisabled') includeDisabled: string, @Res() res: Response) {\n try {\n const includeDisabledFlag =\n typeof includeDisabled === 'string'\n ? ['true', '1', 'yes'].includes(includeDisabled.toLowerCase())\n : false;\n\n const menus = await this.permissionService.getGroupsWithMenus(includeDisabledFlag);\n return RestUtilities.sendBaseResponse(res, menus);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n // -------------------------------------------------------------------------\n // Gestione catalogo: tipi menu, gruppi, menu. Operazioni riservate al superutente.\n // -------------------------------------------------------------------------\n\n @ApiOperation({ summary: 'Recupera il catalogo dei tipi menu', operationId: 'getMenuTypes' })\n @ApiOkResponse({ description: 'Elenco dei tipi menu', type: GetMenuTypesResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Get('menu-types')\n async getMenuTypes(@Res() res: Response) {\n try {\n const types = await this.permissionService.getMenuTypes();\n return RestUtilities.sendBaseResponse(res, types);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo menu', operationId: 'createMenu' })\n @ApiBody({ type: CreateMenuRequest, description: 'Dati del nuovo menu' })\n @ApiResponse({ status: 201, description: 'Menu creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('menus')\n async createMenu(@Req() request: Request, @Body() body: CreateMenuRequest, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare menu.');\n await this.permissionService.createMenu(body);\n return RestUtilities.sendOKMessage(\n res,\n `Il menu ${body.codiceMenu} e' stato creato con successo.`,\n HttpStatus.CREATED,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un menu esistente', operationId: 'updateMenu' })\n @ApiParam({ name: 'codiceMenu', description: 'Codice del menu da aggiornare', required: true, example: 'MNU001' })\n @ApiBody({ type: UpdateMenuRequest, description: 'Campi del menu da aggiornare' })\n @ApiResponse({ status: 200, description: 'Menu aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('menus/:codiceMenu')\n async updateMenu(\n @Req() request: Request,\n @Param('codiceMenu') codiceMenu: string,\n @Body() body: UpdateMenuRequest,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono modificare menu.');\n await this.permissionService.updateMenu(codiceMenu, body);\n return RestUtilities.sendOKMessage(res, `Il menu ${codiceMenu} e' stato aggiornato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un menu', operationId: 'deleteMenu' })\n @ApiParam({ name: 'codiceMenu', description: 'Codice del menu da eliminare', required: true, example: 'MNU001' })\n @ApiResponse({ status: 200, description: 'Menu eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('menus/:codiceMenu')\n async deleteMenu(@Req() request: Request, @Param('codiceMenu') codiceMenu: string, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono eliminare menu.');\n await this.permissionService.deleteMenu(codiceMenu);\n return RestUtilities.sendOKMessage(res, `Il menu ${codiceMenu} e' stato eliminato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo gruppo menu', operationId: 'createMenuGroup' })\n @ApiBody({ type: CreateMenuGroupRequest, description: 'Dati del nuovo gruppo' })\n @ApiResponse({ status: 201, description: 'Gruppo creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('menu-groups')\n async createMenuGroup(@Req() request: Request, @Body() body: CreateMenuGroupRequest, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare gruppi.');\n await this.permissionService.createMenuGroup(body);\n return RestUtilities.sendOKMessage(\n res,\n `Il gruppo ${body.codiceGruppo} e' stato creato con successo.`,\n HttpStatus.CREATED,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un gruppo menu', operationId: 'updateMenuGroup' })\n @ApiParam({ name: 'codiceGruppo', description: 'Codice del gruppo da aggiornare', required: true, example: 'A' })\n @ApiBody({ type: UpdateMenuGroupRequest, description: 'Campi del gruppo da aggiornare' })\n @ApiResponse({ status: 200, description: 'Gruppo aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('menu-groups/:codiceGruppo')\n async updateMenuGroup(\n @Req() request: Request,\n @Param('codiceGruppo') codiceGruppo: string,\n @Body() body: UpdateMenuGroupRequest,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono modificare gruppi.');\n await this.permissionService.updateMenuGroup(codiceGruppo, body);\n return RestUtilities.sendOKMessage(res, `Il gruppo ${codiceGruppo} e' stato aggiornato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un gruppo menu', operationId: 'deleteMenuGroup' })\n @ApiParam({ name: 'codiceGruppo', description: 'Codice del gruppo da eliminare', required: true, example: 'A' })\n @ApiResponse({ status: 200, description: 'Gruppo eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('menu-groups/:codiceGruppo')\n async deleteMenuGroup(@Req() request: Request, @Param('codiceGruppo') codiceGruppo: string, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono eliminare gruppi.');\n await this.permissionService.deleteMenuGroup(codiceGruppo);\n return RestUtilities.sendOKMessage(res, `Il gruppo ${codiceGruppo} e' stato eliminato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo tipo menu', operationId: 'createMenuType' })\n @ApiBody({ type: CreateMenuTypeRequest, description: 'Dati del nuovo tipo menu' })\n @ApiResponse({ status: 201, description: 'Tipo menu creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('menu-types')\n async createMenuType(@Req() request: Request, @Body() body: CreateMenuTypeRequest, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare tipi menu.');\n await this.permissionService.createMenuType(body);\n return RestUtilities.sendOKMessage(\n res,\n `Il tipo menu ${body.codiceTipo} e' stato creato con successo.`,\n HttpStatus.CREATED,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un tipo menu', operationId: 'updateMenuType' })\n @ApiParam({ name: 'codiceTipo', description: 'Codice del tipo menu da aggiornare', required: true, example: 'A' })\n @ApiBody({ type: UpdateMenuTypeRequest, description: 'Campi del tipo menu da aggiornare' })\n @ApiResponse({ status: 200, description: 'Tipo menu aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('menu-types/:codiceTipo')\n async updateMenuType(\n @Req() request: Request,\n @Param('codiceTipo') codiceTipo: string,\n @Body() body: UpdateMenuTypeRequest,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono modificare tipi menu.');\n await this.permissionService.updateMenuType(codiceTipo, body);\n return RestUtilities.sendOKMessage(res, `Il tipo menu ${codiceTipo} e' stato aggiornato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un tipo menu', operationId: 'deleteMenuType' })\n @ApiParam({ name: 'codiceTipo', description: 'Codice del tipo menu da eliminare', required: true, example: 'A' })\n @ApiResponse({ status: 200, description: 'Tipo menu eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('menu-types/:codiceTipo')\n async deleteMenuType(@Req() request: Request, @Param('codiceTipo') codiceTipo: string, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono eliminare tipi menu.');\n await this.permissionService.deleteMenuType(codiceTipo);\n return RestUtilities.sendOKMessage(res, `Il tipo menu ${codiceTipo} e' stato eliminato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Recupera i ruoli e i menu di un utente',\n operationId: 'getUserRolesAndGrants',\n })\n @ApiOkResponse({ description: 'Elenco grant utente', type: UserGrantsResponse })\n @ApiResponse({ status: 200, description: 'Grant utente recuperati con successo', type: UserGrantsResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Get('grants/:codiceUtente')\n async getUserRolesAndGrants(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSelfOrSuperUser(\n getAuthenticatedAccessiUser(request),\n codiceUtente,\n 'Puoi consultare solo i tuoi grant, salvo privilegi amministrativi.',\n );\n\n const menus = await this.permissionService.getUserRolesAndGrants(codiceUtente);\n return RestUtilities.sendBaseResponse(res, menus);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PermissionController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/PermissionController.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadRequestException,\n Body,\n Controller,\n Delete,\n Get,\n HttpStatus,\n Param,\n ParseIntPipe,\n Post,\n Put,\n Query,\n Req,\n Res,\n UseGuards,\n} from '@nestjs/common';\nimport {\n ApiBearerAuth,\n ApiBody,\n ApiInternalServerErrorResponse,\n ApiOkResponse,\n ApiOperation,\n ApiParam,\n ApiQuery,\n ApiResponse,\n ApiTags,\n} from '@nestjs/swagger';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport { ActionResponse, ErrorResponse } from '../Dtos/BaseResponse';\nimport { AssignPermissionsToUserRequest } from '../Dtos/AssignPermissionsToUserRequest';\nimport { AssignRolesToUserRequest } from '../Dtos/AssignRolesToUserRequest';\nimport {\n CreateMenuGroupRequest,\n CreateMenuRequest,\n CreateMenuTypeRequest,\n GetMenuTypesResponse,\n UpdateMenuGroupRequest,\n UpdateMenuRequest,\n UpdateMenuTypeRequest,\n} from '../Dtos/CatalogDtos';\nimport { GetGroupsWithMenusResponse } from '../Dtos/GetGroupsWithMenusResponse';\nimport { GetMenusResponse } from '../Dtos/GetMenusResponse';\nimport { GetRolesResponse } from '../Dtos/GetRolesResponse';\nimport { Role } from '../Dtos/Role';\nimport { UserGrantsResponse } from '../Dtos/UserGrantsResponse';\nimport { PermissionService } from '../Services/PermissionService/PermissionService';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport {\n ensureSelfOrSuperUser,\n ensureAdmin,\n ensureUserManagement,\n getAuthenticatedAccessiUser,\n} from '../security/accessControl';\n\n@ApiTags('Permission')\n@ApiBearerAuth()\n@Controller('accessi/permission')\n@UseGuards(JwtSimpleGuard)\n/**\n * API amministrative per ruoli, grant e catalogo menu. Le assegnazioni sono sostitutive, non incrementali:\n * il client deve inviare l'intera lista desiderata per non rimuovere voci involontariamente.\n */\nexport class PermissionController {\n constructor(private readonly permissionService: PermissionService) {}\n\n private sendControllerError(res: Response, error: unknown) {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, PermissionController.name);\n }\n\n @ApiOperation({\n summary: 'Ritorna i ruoli disponibili con i relativi menu',\n operationId: 'getRoles',\n description: 'Recupera tutti i ruoli presenti nel sistema con le relative voci di menu.',\n })\n @ApiOkResponse({ description: 'Elenco dei ruoli con i rispettivi menu', type: GetRolesResponse })\n @ApiInternalServerErrorResponse({ description: 'Errore interno del server', type: ErrorResponse })\n @ApiResponse({ status: HttpStatus.OK, description: 'Lista dei ruoli restituita con successo.', type: GetRolesResponse })\n @ApiResponse({\n status: HttpStatus.INTERNAL_SERVER_ERROR,\n description: 'Errore interno del server durante il recupero dei ruoli.',\n type: ErrorResponse,\n })\n @Get('roles')\n async getRoles(@Res() res: Response): Promise<Response> {\n try {\n const roles = await this.permissionService.getRolesWithMenus();\n return RestUtilities.sendBaseResponse(res, roles);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un ruolo esistente', operationId: 'updateRole' })\n @ApiParam({\n name: 'codiceRuolo',\n description: 'Codice identificativo del ruolo da aggiornare',\n required: true,\n example: 101,\n type: Number,\n })\n @ApiBody({\n description: 'Dati aggiornati del ruolo',\n type: Role,\n })\n @ApiResponse({ status: 200, description: 'Il ruolo e stato aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('update-role/:codiceRuolo')\n async updateRole(\n @Req() request: Request,\n @Param('codiceRuolo', ParseIntPipe) codiceRuolo: number,\n @Body() role: Role,\n @Res() res: Response,\n ) {\n try {\n ensureAdmin(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono modificare i ruoli.',\n );\n\n if (Number.isNaN(codiceRuolo)) throw new BadRequestException('Il codice del ruolo e obbligatorio.');\n if (!role.descrizioneRuolo) throw new BadRequestException('La descrizione del ruolo non puo essere vuota.');\n if (!role.menu || role.menu.length === 0) {\n throw new BadRequestException('Il ruolo deve avere almeno un menu.');\n }\n\n await this.permissionService.updateOrInsertRole(role, codiceRuolo);\n return RestUtilities.sendOKMessage(\n res,\n `Il ruolo ${codiceRuolo} e' stato aggiornato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo ruolo', operationId: 'createRole' })\n @ApiResponse({ status: 201, description: 'Il ruolo e stato creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBody({\n description: 'Dati del nuovo ruolo',\n required: true,\n type: Role,\n })\n @Post('create-role')\n async createRole(@Req() request: Request, @Res() res: Response, @Body() role: Role) {\n try {\n ensureAdmin(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono creare ruoli.',\n );\n\n if (!role) throw new BadRequestException('Il ruolo non puo essere vuoto.');\n if (!role.descrizioneRuolo) throw new BadRequestException('La descrizione del ruolo non puo essere vuota.');\n if (!role.menu || role.menu.length === 0) {\n throw new BadRequestException('Il ruolo deve avere almeno un menu.');\n }\n\n await this.permissionService.updateOrInsertRole(role);\n return RestUtilities.sendOKMessage(res, 'Il ruolo e stato creato con successo.', HttpStatus.CREATED);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Assegna piu ruoli a un utente', operationId: 'assignRolesToUser' })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente a cui assegnare i ruoli\",\n required: true,\n example: 22,\n })\n @ApiBody({\n type: AssignRolesToUserRequest,\n description: \"Lista dei ruoli da assegnare all'utente\",\n })\n @ApiResponse({ status: 200, description: \"Ruoli assegnati con successo all'utente\", type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('assign-roles/:codiceUtente')\n async assignRolesToUser(\n @Req() request: Request,\n @Res() res: Response,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() assignRolesRequest: AssignRolesToUserRequest,\n ) {\n try {\n ensureUserManagement(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono assegnare ruoli agli utenti.',\n );\n\n await this.permissionService.assignRolesToUser(codiceUtente, assignRolesRequest.roles);\n const responseMessage =\n assignRolesRequest.roles.length === 0\n ? `Tutti i ruoli sono stati rimossi dall'utente ${codiceUtente}.`\n : `I ruoli ${assignRolesRequest.roles.join(', ')} sono stati assegnati all'utente ${codiceUtente}.`;\n return RestUtilities.sendOKMessage(\n res,\n responseMessage,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Assegna abilitazioni dirette a un utente',\n operationId: 'assignPermissionsToUser',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente a cui assegnare le abilitazioni\",\n required: true,\n example: 22,\n })\n @ApiBody({\n type: AssignPermissionsToUserRequest,\n description: \"Lista delle abilitazioni da assegnare all'utente\",\n })\n @ApiResponse({ status: 200, description: \"Abilitazioni assegnate con successo all'utente\", type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore di validazione nei dati inviati', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('assign-permissions/:codiceUtente')\n async assignPermissionsToUser(\n @Req() request: Request,\n @Res() res: Response,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() assignPermissionsRequest: AssignPermissionsToUserRequest,\n ) {\n try {\n ensureUserManagement(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono assegnare permessi agli utenti.',\n );\n\n await this.permissionService.assignPermissionsToUser(\n codiceUtente,\n assignPermissionsRequest.permissions,\n );\n const responseMessage =\n assignPermissionsRequest.permissions.length === 0\n ? `Tutte le abilitazioni sono state rimosse dall'utente ${codiceUtente}.`\n : `Le abilitazioni sono state assegnate all'utente ${codiceUtente}.`;\n return RestUtilities.sendOKMessage(\n res,\n responseMessage,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un ruolo esistente', operationId: 'deleteRole' })\n @ApiParam({\n name: 'codiceRuolo',\n description: 'Codice identificativo del ruolo da eliminare',\n required: true,\n example: 382,\n type: Number,\n })\n @ApiResponse({ status: 200, description: 'Ruolo eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Errore nei parametri della richiesta', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('delete-role/:codiceRuolo')\n async deleteRole(\n @Req() request: Request,\n @Param('codiceRuolo', ParseIntPipe) codiceRuolo: number,\n @Res() res: Response,\n ) {\n try {\n ensureAdmin(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono eliminare ruoli.',\n );\n\n await this.permissionService.deleteRole(codiceRuolo);\n return RestUtilities.sendOKMessage(\n res,\n `Il ruolo ${codiceRuolo} e' stato eliminato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Recupera tutti i menu disponibili', operationId: 'getMenus' })\n @ApiOkResponse({ description: 'Elenco menu', type: GetMenusResponse })\n @ApiResponse({ status: 200, description: 'Lista dei menu recuperata con successo', type: GetMenusResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Get('menus')\n async getMenus(@Res() res: Response) {\n try {\n const menus = await this.permissionService.getMenus();\n return RestUtilities.sendBaseResponse(res, menus);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Recupera tutti i gruppi disponibili con i relativi menu',\n operationId: 'getGroupsWithMenus',\n })\n @ApiOkResponse({\n description: 'Elenco gruppi con relativi menu',\n type: GetGroupsWithMenusResponse,\n })\n @ApiResponse({ status: 200, description: 'Lista dei menu recuperata con successo', type: GetGroupsWithMenusResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiQuery({\n name: 'includeDisabled',\n required: false,\n type: Boolean,\n description: 'Quando true ritorna anche i menu e gruppi disabilitati.',\n })\n @Get('groups-with-menus')\n async getGroupsWithMenus(@Query('includeDisabled') includeDisabled: string, @Res() res: Response) {\n try {\n const includeDisabledFlag =\n typeof includeDisabled === 'string'\n ? ['true', '1', 'yes'].includes(includeDisabled.toLowerCase())\n : false;\n\n const menus = await this.permissionService.getGroupsWithMenus(includeDisabledFlag);\n return RestUtilities.sendBaseResponse(res, menus);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n // -------------------------------------------------------------------------\n // Gestione catalogo: tipi menu, gruppi, menu. Operazioni riservate al superutente.\n // -------------------------------------------------------------------------\n\n @ApiOperation({ summary: 'Recupera il catalogo dei tipi menu', operationId: 'getMenuTypes' })\n @ApiOkResponse({ description: 'Elenco dei tipi menu', type: GetMenuTypesResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Get('menu-types')\n async getMenuTypes(@Res() res: Response) {\n try {\n const types = await this.permissionService.getMenuTypes();\n return RestUtilities.sendBaseResponse(res, types);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo menu', operationId: 'createMenu' })\n @ApiBody({ type: CreateMenuRequest, description: 'Dati del nuovo menu' })\n @ApiResponse({ status: 201, description: 'Menu creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('menus')\n async createMenu(@Req() request: Request, @Body() body: CreateMenuRequest, @Res() res: Response) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare menu.');\n await this.permissionService.createMenu(body);\n return RestUtilities.sendOKMessage(\n res,\n `Il menu ${body.codiceMenu} e' stato creato con successo.`,\n HttpStatus.CREATED,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un menu esistente', operationId: 'updateMenu' })\n @ApiParam({ name: 'codiceMenu', description: 'Codice del menu da aggiornare', required: true, example: 'MNU001' })\n @ApiBody({ type: UpdateMenuRequest, description: 'Campi del menu da aggiornare' })\n @ApiResponse({ status: 200, description: 'Menu aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('menus/:codiceMenu')\n async updateMenu(\n @Req() request: Request,\n @Param('codiceMenu') codiceMenu: string,\n @Body() body: UpdateMenuRequest,\n @Res() res: Response,\n ) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono modificare menu.');\n await this.permissionService.updateMenu(codiceMenu, body);\n return RestUtilities.sendOKMessage(res, `Il menu ${codiceMenu} e' stato aggiornato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un menu', operationId: 'deleteMenu' })\n @ApiParam({ name: 'codiceMenu', description: 'Codice del menu da eliminare', required: true, example: 'MNU001' })\n @ApiResponse({ status: 200, description: 'Menu eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('menus/:codiceMenu')\n async deleteMenu(@Req() request: Request, @Param('codiceMenu') codiceMenu: string, @Res() res: Response) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono eliminare menu.');\n await this.permissionService.deleteMenu(codiceMenu);\n return RestUtilities.sendOKMessage(res, `Il menu ${codiceMenu} e' stato eliminato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo gruppo menu', operationId: 'createMenuGroup' })\n @ApiBody({ type: CreateMenuGroupRequest, description: 'Dati del nuovo gruppo' })\n @ApiResponse({ status: 201, description: 'Gruppo creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('menu-groups')\n async createMenuGroup(@Req() request: Request, @Body() body: CreateMenuGroupRequest, @Res() res: Response) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare gruppi.');\n await this.permissionService.createMenuGroup(body);\n return RestUtilities.sendOKMessage(\n res,\n `Il gruppo ${body.codiceGruppo} e' stato creato con successo.`,\n HttpStatus.CREATED,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un gruppo menu', operationId: 'updateMenuGroup' })\n @ApiParam({ name: 'codiceGruppo', description: 'Codice del gruppo da aggiornare', required: true, example: 'A' })\n @ApiBody({ type: UpdateMenuGroupRequest, description: 'Campi del gruppo da aggiornare' })\n @ApiResponse({ status: 200, description: 'Gruppo aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('menu-groups/:codiceGruppo')\n async updateMenuGroup(\n @Req() request: Request,\n @Param('codiceGruppo') codiceGruppo: string,\n @Body() body: UpdateMenuGroupRequest,\n @Res() res: Response,\n ) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono modificare gruppi.');\n await this.permissionService.updateMenuGroup(codiceGruppo, body);\n return RestUtilities.sendOKMessage(res, `Il gruppo ${codiceGruppo} e' stato aggiornato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un gruppo menu', operationId: 'deleteMenuGroup' })\n @ApiParam({ name: 'codiceGruppo', description: 'Codice del gruppo da eliminare', required: true, example: 'A' })\n @ApiResponse({ status: 200, description: 'Gruppo eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('menu-groups/:codiceGruppo')\n async deleteMenuGroup(@Req() request: Request, @Param('codiceGruppo') codiceGruppo: string, @Res() res: Response) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono eliminare gruppi.');\n await this.permissionService.deleteMenuGroup(codiceGruppo);\n return RestUtilities.sendOKMessage(res, `Il gruppo ${codiceGruppo} e' stato eliminato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Crea un nuovo tipo menu', operationId: 'createMenuType' })\n @ApiBody({ type: CreateMenuTypeRequest, description: 'Dati del nuovo tipo menu' })\n @ApiResponse({ status: 201, description: 'Tipo menu creato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Post('menu-types')\n async createMenuType(@Req() request: Request, @Body() body: CreateMenuTypeRequest, @Res() res: Response) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare tipi menu.');\n await this.permissionService.createMenuType(body);\n return RestUtilities.sendOKMessage(\n res,\n `Il tipo menu ${body.codiceTipo} e' stato creato con successo.`,\n HttpStatus.CREATED,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Aggiorna un tipo menu', operationId: 'updateMenuType' })\n @ApiParam({ name: 'codiceTipo', description: 'Codice del tipo menu da aggiornare', required: true, example: 'A' })\n @ApiBody({ type: UpdateMenuTypeRequest, description: 'Campi del tipo menu da aggiornare' })\n @ApiResponse({ status: 200, description: 'Tipo menu aggiornato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Put('menu-types/:codiceTipo')\n async updateMenuType(\n @Req() request: Request,\n @Param('codiceTipo') codiceTipo: string,\n @Body() body: UpdateMenuTypeRequest,\n @Res() res: Response,\n ) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono modificare tipi menu.');\n await this.permissionService.updateMenuType(codiceTipo, body);\n return RestUtilities.sendOKMessage(res, `Il tipo menu ${codiceTipo} e' stato aggiornato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({ summary: 'Elimina un tipo menu', operationId: 'deleteMenuType' })\n @ApiParam({ name: 'codiceTipo', description: 'Codice del tipo menu da eliminare', required: true, example: 'A' })\n @ApiResponse({ status: 200, description: 'Tipo menu eliminato con successo', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Delete('menu-types/:codiceTipo')\n async deleteMenuType(@Req() request: Request, @Param('codiceTipo') codiceTipo: string, @Res() res: Response) {\n try {\n ensureAdmin(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono eliminare tipi menu.');\n await this.permissionService.deleteMenuType(codiceTipo);\n return RestUtilities.sendOKMessage(res, `Il tipo menu ${codiceTipo} e' stato eliminato con successo.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Recupera i ruoli e i menu di un utente',\n operationId: 'getUserRolesAndGrants',\n })\n @ApiOkResponse({ description: 'Elenco grant utente', type: UserGrantsResponse })\n @ApiResponse({ status: 200, description: 'Grant utente recuperati con successo', type: UserGrantsResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @Get('grants/:codiceUtente')\n async getUserRolesAndGrants(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSelfOrSuperUser(\n getAuthenticatedAccessiUser(request),\n codiceUtente,\n 'Puoi consultare solo i tuoi grant, salvo privilegi amministrativi.',\n );\n\n const menus = await this.permissionService.getUserRolesAndGrants(codiceUtente);\n return RestUtilities.sendBaseResponse(res, menus);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n}\n"]}
|
|
@@ -51,7 +51,7 @@ let ServiceTokenController = ServiceTokenController_1 = class ServiceTokenContro
|
|
|
51
51
|
requireSuperUser(req) {
|
|
52
52
|
this.assertEnabled();
|
|
53
53
|
const user = (0, accessControl_1.getAuthenticatedAccessiUser)(req);
|
|
54
|
-
(0, accessControl_1.
|
|
54
|
+
(0, accessControl_1.ensureAdmin)(user, 'Solo un admin puo gestire i token di servizio.');
|
|
55
55
|
return user;
|
|
56
56
|
}
|
|
57
57
|
sendError(res, error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceTokenController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/ServiceTokenController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Body, Controller, Delete, Get, HttpException, Inject, Param, Post, Query, Req, Res, UseGuards } from '@nestjs/common';\nimport { ApiBearerAuth, ApiBody, ApiOperation, ApiParam, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions } from '../AccessiModule';\nimport {\n CreateServiceTokenRequest,\n CreateServiceTokenResponse,\n ErrorResponse,\n GetServiceTokensResponse,\n} from '../Dtos';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport { getAuthenticatedAccessiUser, ensureSuperUser } from '../security/accessControl';\nimport { ServiceTokenService } from '../Services/ServiceTokenService/ServiceTokenService';\n\n/**\n * Gestione amministrativa dei token di servizio (macchina-a-macchina).\n *\n * Il segreto e mostrato una sola volta alla creazione/rotazione; le operazioni richiedono un\n * superutente Accessi. Gli endpoint di utilizzo dei token non sono qui: i consumer autenticano\n * con `Authorization: Bearer <token>` tramite `ServiceTokenGuard`.\n */\n@ApiBearerAuth()\n@ApiTags('ServiceToken')\n@Controller('accessi/service-token')\n@UseGuards(JwtSimpleGuard)\nexport class ServiceTokenController {\n constructor(\n private readonly serviceTokenService: ServiceTokenService,\n @Inject('ACCESSI_OPTIONS') private readonly options: AccessiOptions,\n ) {}\n\n private assertEnabled(): void {\n if (this.options.serviceTokens?.enabled === false) {\n throw new HttpException('I token di servizio sono disabilitati in questa istanza.', 404);\n }\n }\n\n private requireSuperUser(req: Request) {\n this.assertEnabled();\n const user = getAuthenticatedAccessiUser(req);\n ensureSuperUser(user, 'Solo un superutente puo gestire i token di servizio.');\n return user;\n }\n\n private sendError(res: Response, error: unknown): Response {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, ServiceTokenController.name);\n }\n\n @Post()\n @ApiOperation({ summary: 'Emetti un nuovo token di servizio', operationId: 'createServiceToken' })\n @ApiBody({ type: CreateServiceTokenRequest })\n @ApiResponse({ status: 201, description: 'Token creato; il segreto e mostrato solo in questa risposta.', type: CreateServiceTokenResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 401, description: 'Token Accessi mancante o non valido', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async create(\n @Body() body: CreateServiceTokenRequest,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n const issued = await this.serviceTokenService.issue(body, user.codiceUtente);\n return RestUtilities.sendBaseResponse(res, issued, 201);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Get()\n @ApiOperation({ summary: 'Elenca i token di servizio (senza segreti)', operationId: 'getServiceTokens' })\n @ApiQuery({ name: 'includeRevoked', required: false, description: 'Includi anche i token revocati.', type: Boolean })\n @ApiResponse({ status: 200, description: 'Elenco dei token.', type: GetServiceTokensResponse })\n @ApiResponse({ status: 401, description: 'Token Accessi mancante o non valido', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async list(\n @Query('includeRevoked') includeRevoked: string | undefined,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n this.requireSuperUser(req);\n const tokens = await this.serviceTokenService.list(includeRevoked === 'true');\n return RestUtilities.sendBaseResponse(res, tokens);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Delete(':tokenId')\n @ApiOperation({ summary: 'Revoca un token di servizio', operationId: 'revokeServiceToken' })\n @ApiParam({ name: 'tokenId', description: 'Identificativo del token.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' })\n @ApiResponse({ status: 200, description: 'Token revocato.', type: ErrorResponse })\n @ApiResponse({ status: 404, description: 'Token non trovato', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async revoke(\n @Param('tokenId') tokenId: string,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n await this.serviceTokenService.revoke(tokenId, user.codiceUtente);\n return RestUtilities.sendOKMessage(res, 'Token di servizio revocato con successo.');\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Post(':tokenId/rotate')\n @ApiOperation({ summary: 'Ruota un token di servizio', operationId: 'rotateServiceToken' })\n @ApiParam({ name: 'tokenId', description: 'Identificativo del token da sostituire.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' })\n @ApiResponse({ status: 201, description: 'Nuovo token emesso; il vecchio e revocato.', type: CreateServiceTokenResponse })\n @ApiResponse({ status: 404, description: 'Token non trovato', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async rotate(\n @Param('tokenId') tokenId: string,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n const issued = await this.serviceTokenService.rotate(tokenId, user.codiceUtente);\n return RestUtilities.sendBaseResponse(res, issued, 201);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ServiceTokenController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/ServiceTokenController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Body, Controller, Delete, Get, HttpException, Inject, Param, Post, Query, Req, Res, UseGuards } from '@nestjs/common';\nimport { ApiBearerAuth, ApiBody, ApiOperation, ApiParam, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions } from '../AccessiModule';\nimport {\n CreateServiceTokenRequest,\n CreateServiceTokenResponse,\n ErrorResponse,\n GetServiceTokensResponse,\n} from '../Dtos';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport { getAuthenticatedAccessiUser, ensureAdmin } from '../security/accessControl';\nimport { ServiceTokenService } from '../Services/ServiceTokenService/ServiceTokenService';\n\n/**\n * Gestione amministrativa dei token di servizio (macchina-a-macchina).\n *\n * Il segreto e mostrato una sola volta alla creazione/rotazione; le operazioni richiedono un\n * superutente Accessi. Gli endpoint di utilizzo dei token non sono qui: i consumer autenticano\n * con `Authorization: Bearer <token>` tramite `ServiceTokenGuard`.\n */\n@ApiBearerAuth()\n@ApiTags('ServiceToken')\n@Controller('accessi/service-token')\n@UseGuards(JwtSimpleGuard)\nexport class ServiceTokenController {\n constructor(\n private readonly serviceTokenService: ServiceTokenService,\n @Inject('ACCESSI_OPTIONS') private readonly options: AccessiOptions,\n ) {}\n\n private assertEnabled(): void {\n if (this.options.serviceTokens?.enabled === false) {\n throw new HttpException('I token di servizio sono disabilitati in questa istanza.', 404);\n }\n }\n\n private requireSuperUser(req: Request) {\n this.assertEnabled();\n const user = getAuthenticatedAccessiUser(req);\n ensureAdmin(user, 'Solo un admin puo gestire i token di servizio.');\n return user;\n }\n\n private sendError(res: Response, error: unknown): Response {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, ServiceTokenController.name);\n }\n\n @Post()\n @ApiOperation({ summary: 'Emetti un nuovo token di servizio', operationId: 'createServiceToken' })\n @ApiBody({ type: CreateServiceTokenRequest })\n @ApiResponse({ status: 201, description: 'Token creato; il segreto e mostrato solo in questa risposta.', type: CreateServiceTokenResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 401, description: 'Token Accessi mancante o non valido', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async create(\n @Body() body: CreateServiceTokenRequest,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n const issued = await this.serviceTokenService.issue(body, user.codiceUtente);\n return RestUtilities.sendBaseResponse(res, issued, 201);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Get()\n @ApiOperation({ summary: 'Elenca i token di servizio (senza segreti)', operationId: 'getServiceTokens' })\n @ApiQuery({ name: 'includeRevoked', required: false, description: 'Includi anche i token revocati.', type: Boolean })\n @ApiResponse({ status: 200, description: 'Elenco dei token.', type: GetServiceTokensResponse })\n @ApiResponse({ status: 401, description: 'Token Accessi mancante o non valido', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async list(\n @Query('includeRevoked') includeRevoked: string | undefined,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n this.requireSuperUser(req);\n const tokens = await this.serviceTokenService.list(includeRevoked === 'true');\n return RestUtilities.sendBaseResponse(res, tokens);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Delete(':tokenId')\n @ApiOperation({ summary: 'Revoca un token di servizio', operationId: 'revokeServiceToken' })\n @ApiParam({ name: 'tokenId', description: 'Identificativo del token.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' })\n @ApiResponse({ status: 200, description: 'Token revocato.', type: ErrorResponse })\n @ApiResponse({ status: 404, description: 'Token non trovato', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async revoke(\n @Param('tokenId') tokenId: string,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n await this.serviceTokenService.revoke(tokenId, user.codiceUtente);\n return RestUtilities.sendOKMessage(res, 'Token di servizio revocato con successo.');\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Post(':tokenId/rotate')\n @ApiOperation({ summary: 'Ruota un token di servizio', operationId: 'rotateServiceToken' })\n @ApiParam({ name: 'tokenId', description: 'Identificativo del token da sostituire.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' })\n @ApiResponse({ status: 201, description: 'Nuovo token emesso; il vecchio e revocato.', type: CreateServiceTokenResponse })\n @ApiResponse({ status: 404, description: 'Token non trovato', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async rotate(\n @Param('tokenId') tokenId: string,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n const issued = await this.serviceTokenService.rotate(tokenId, user.codiceUtente);\n return RestUtilities.sendBaseResponse(res, issued, 201);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n}\n"]}
|
|
@@ -59,7 +59,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
59
59
|
getUsers(request, res, email, codiceUtente, includeExtensionFields, includeGrants, limit, offset) {
|
|
60
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
61
|
try {
|
|
62
|
-
(0, accessControl_1.
|
|
62
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono consultare gli utenti.');
|
|
63
63
|
const filters = { email, codiceUtente, limit, offset };
|
|
64
64
|
const options = {
|
|
65
65
|
includeExtensionFields: includeExtensionFields !== null && includeExtensionFields !== void 0 ? includeExtensionFields : true,
|
|
@@ -79,7 +79,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
79
79
|
deleteUser(request, codiceUtente, res) {
|
|
80
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
81
|
try {
|
|
82
|
-
(0, accessControl_1.
|
|
82
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono eliminare utenti.');
|
|
83
83
|
yield this.userService.deleteUser(codiceUtente);
|
|
84
84
|
return Utilities_1.RestUtilities.sendOKMessage(res, "L'utente e' stato eliminato con successo.");
|
|
85
85
|
}
|
|
@@ -91,7 +91,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
91
91
|
forcePasswordReset(request, codiceUtente, res) {
|
|
92
92
|
return __awaiter(this, void 0, void 0, function* () {
|
|
93
93
|
try {
|
|
94
|
-
(0, accessControl_1.
|
|
94
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono forzare il reset password.');
|
|
95
95
|
yield this.userService.forcePasswordReset(codiceUtente);
|
|
96
96
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Email di reset inviata all utente ${codiceUtente}.`);
|
|
97
97
|
}
|
|
@@ -103,7 +103,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
103
103
|
forcePasswordResetLegacy(request, res) {
|
|
104
104
|
return __awaiter(this, void 0, void 0, function* () {
|
|
105
105
|
try {
|
|
106
|
-
(0, accessControl_1.
|
|
106
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono forzare il reset password.');
|
|
107
107
|
const sent = yield this.userService.forcePasswordResetForLegacyPasswords();
|
|
108
108
|
return Utilities_1.RestUtilities.sendOKMessage(res, `Email di reset inviata a ${sent} utenti con password legacy.`);
|
|
109
109
|
}
|
|
@@ -115,7 +115,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
115
115
|
setStatoRegistrazione(request, body, res) {
|
|
116
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
117
|
try {
|
|
118
|
-
(0, accessControl_1.
|
|
118
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono modificare lo stato di registrazione.');
|
|
119
119
|
const { codiceUtente, statoRegistrazione } = body;
|
|
120
120
|
if (!codiceUtente)
|
|
121
121
|
throw new common_1.BadRequestException('Il codice utente e\' obbligatorio.');
|
|
@@ -156,7 +156,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
156
156
|
createManagedUser(request, registrationData, res) {
|
|
157
157
|
return __awaiter(this, void 0, void 0, function* () {
|
|
158
158
|
try {
|
|
159
|
-
(0, accessControl_1.
|
|
159
|
+
(0, accessControl_1.ensureUserManagement)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono creare utenti.');
|
|
160
160
|
const codiceUtente = yield this.userService.register(registrationData, { allowPrivilegedFields: true });
|
|
161
161
|
yield this.emailService.sendPasswordResetEmail(registrationData.email, registrationData.htmlMail);
|
|
162
162
|
return Utilities_1.RestUtilities.sendBaseResponse(res, codiceUtente, common_1.HttpStatus.CREATED);
|
|
@@ -172,7 +172,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
172
172
|
const authenticatedUser = (0, accessControl_1.getAuthenticatedAccessiUser)(request);
|
|
173
173
|
const isPrivilegedUpdate = (0, accessControl_1.hasPrivilegedUserChanges)(user);
|
|
174
174
|
if (isPrivilegedUpdate) {
|
|
175
|
-
(0, accessControl_1.
|
|
175
|
+
(0, accessControl_1.ensureUserManagement)(authenticatedUser, 'Solo gli amministratori possono modificare ruoli, permessi o flag privilegiati.');
|
|
176
176
|
}
|
|
177
177
|
else {
|
|
178
178
|
(0, accessControl_1.ensureSelfOrSuperUser)(authenticatedUser, codiceUtente, 'Puoi modificare solo il tuo profilo.');
|
|
@@ -181,7 +181,7 @@ let UserController = UserController_1 = class UserController {
|
|
|
181
181
|
throw new common_1.BadRequestException('Il codice utente nel body non coincide con quello del path.');
|
|
182
182
|
}
|
|
183
183
|
yield this.userService.updateUser(codiceUtente, user, {
|
|
184
|
-
allowPrivilegedChanges: authenticatedUser.flagSuper,
|
|
184
|
+
allowPrivilegedChanges: authenticatedUser.flagSuper || authenticatedUser.flagAdmin,
|
|
185
185
|
});
|
|
186
186
|
return Utilities_1.RestUtilities.sendOKMessage(res, `L'utente ${codiceUtente} e' stato aggiornato con successo.`);
|
|
187
187
|
}
|