Merge branch 'main' of git.targo.ca:Targo/targo_backend

This commit is contained in:
Matthieu Haineault 2025-12-02 09:17:30 -05:00
commit 0180fa3fdd
5 changed files with 29 additions and 16 deletions

View File

@ -33,11 +33,13 @@ export class ModulesGuard implements CanActivate {
if (!user) {
return false;
}
if (!requiredModules.includes(user.role)) {
for (const module of requiredModules) {
if (!user.user_module_access.includes(module)) {
throw new ForbiddenException(
`The role ${user.role} is not authorized to access this resource.`,
);
}
}
return true;
}
}

View File

@ -35,9 +35,8 @@ export const toBooleanFromString = (arr?: readonly string[] | null): Record<Modu
return result;
}
export const toStringFromBoolean = (map: Record<Modules, boolean>): Record<Modules, Modules | null> => {
return module_list.reduce((acc, mod) => {
acc[mod] = map[mod] ? mod : null;
return acc;
}, {} as Record<Modules, Modules | null>);
export const toStringFromBoolean = (boolean_module_access: Record<Modules, boolean>): Modules[] => {
const access_array = Object.entries(boolean_module_access);
const allowed_accesses = access_array.filter(([_key, value]) => value === true);
return allowed_accesses.map(([key]) => key as Modules);
}

View File

@ -159,10 +159,7 @@ export class EmployeesService {
let module_access_array: Modules[] = [];
if (employee.user.user_module_access) {
const stringfy_module_access = toStringFromBoolean(employee.user.user_module_access);
module_access_array = module_list
.map(mod => stringfy_module_access[mod])
.filter((value): value is Modules => value !== null && value !== undefined);
module_access_array = toStringFromBoolean(employee.user.user_module_access);
}
let company_name = 'Solucom';

View File

@ -1,5 +1,6 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { Users } from '@prisma/client';
import { Modules, Users } from '@prisma/client';
import { toStringFromBoolean } from 'src/common/mappers/module-access.mapper';
import { PrismaService } from 'src/prisma/prisma.service';
@Injectable()
@ -26,12 +27,16 @@ export abstract class AbstractUserService {
if (!user) {
throw new NotFoundException(`No user with email #${email} exists`);
}
let module_access: Modules[] = [];
if (user.user_module_access !== null) module_access = toStringFromBoolean(user.user_module_access);
const clean_user = {
first_name: user.first_name,
last_name: user.last_name,
email: user.email,
role: user.role,
user_module_access: user.user_module_access,
user_module_access: module_access,
}
return clean_user;

View File

@ -0,0 +1,10 @@
import { Modules, Roles } from "@prisma/client";
import { IsArray, IsEmail, IsEnum, IsString } from "class-validator";
export class UserDto {
@IsString() first_name!: string;
@IsString() last_name!: string;
@IsEmail() email!: string;
@IsEnum(Roles) role!: string;
@IsArray() @IsEnum(Modules, { each: true }) user_module_access!: Modules[];
}