feat: admin creation modal and backend fixes for user updates (#96)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-24 18:39:01 +01:00
co-authored by Cursor
parent 222d7c702f
commit d66bdd04be
8 changed files with 508 additions and 29 deletions
@@ -36,10 +36,10 @@ export class CreateUserDto {
@MaxLength(100)
nom: string;
@ApiProperty({ enum: GenreType, required: false, default: GenreType.AUTRE })
@ApiProperty({ enum: GenreType, required: false })
@IsOptional()
@IsEnum(GenreType)
genre?: GenreType = GenreType.AUTRE;
genre?: GenreType;
@ApiProperty({ enum: RoleType })
@IsEnum(RoleType)
@@ -86,7 +86,7 @@ export class CreateUserDto {
@ApiProperty({ default: false })
@IsOptional()
@IsBoolean()
consentement_photo?: boolean = false;
consentement_photo?: boolean;
@ApiProperty({ required: false })
@IsOptional()
@@ -96,7 +96,7 @@ export class CreateUserDto {
@ApiProperty({ default: false })
@IsOptional()
@IsBoolean()
changement_mdp_obligatoire?: boolean = false;
changement_mdp_obligatoire?: boolean;
@ApiProperty({ example: true })
@IsBoolean()
@@ -1,4 +1,10 @@
import { PartialType } from "@nestjs/swagger";
import { PartialType, ApiProperty } from "@nestjs/swagger";
import { CreateUserDto } from "./create_user.dto";
import { IsOptional, IsUUID } from "class-validator";
export class UpdateGestionnaireDto extends PartialType(CreateUserDto) {}
export class UpdateGestionnaireDto extends PartialType(CreateUserDto) {
@ApiProperty({ required: false, description: 'ID du relais de rattachement' })
@IsOptional()
@IsUUID()
relaisId?: string;
}
+2 -2
View File
@@ -55,9 +55,9 @@ export class UserController {
return this.userService.findOne(id);
}
// Modifier un utilisateur (réservé super_admin)
// Modifier un utilisateur (réservé super_admin et admin)
@Patch(':id')
@Roles(RoleType.SUPER_ADMIN)
@Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR)
@ApiOperation({ summary: 'Mettre à jour un utilisateur' })
@ApiParam({ name: 'id', description: "UUID de l'utilisateur" })
updateUser(
+5
View File
@@ -160,6 +160,11 @@ export class UserService {
throw new ForbiddenException('Accès réservé aux super admins');
}
// Un admin ne peut pas modifier un super admin
if (currentUser.role === RoleType.ADMINISTRATEUR && user.role === RoleType.SUPER_ADMIN) {
throw new ForbiddenException('Vous ne pouvez pas modifier un super administrateur');
}
// Empêcher de modifier le flag changement_mdp_obligatoire pour admin/gestionnaire
if (
(user.role === RoleType.ADMINISTRATEUR || user.role === RoleType.GESTIONNAIRE) &&